Поместите справа индикатор ExpandableListView в Android

Как указано в документации React, нет гарантии того, что setState запущен синхронно, поэтому ваш console.log может вернуть состояние до его обновления.

Майкл Паркер упоминает о передаче обратного вызова внутри setState. Другой способ обработки логики после изменения состояния осуществляется с помощью метода жизненного цикла componentDidUpdate, который является методом, рекомендованным в документах React.

Обычно мы рекомендуем использовать для этой логики componentDidUpdate ().

Это особенно полезно, когда могут быть последовательные setState s, и вы хотели бы запустить ту же функцию после каждого изменения состояния. Вместо добавления обратного вызова к каждому setState, вы можете поместить функцию внутри componentDidUpdate с конкретной логикой внутри, если необходимо.

// example
componentDidUpdate(prevProps, prevState) {
  if (this.state.value > prevState.value) {
    this.foo();  
  }
}
29
задан Filnik 11 February 2014 в 15:37
поделиться

3 ответа

Я не знаю, как сделать это из XML, но я расскажу вам, как сделать это динамически в вашем адаптере.

Сначала вы должны удалить индикатор группы из вашего xml

 <ExpandableListView [...] 
    android:groupIndicator="@null" />

Затем в макете своего родителя добавьте вид изображения в правильное положение вашего макета.

Затем в вашем пользовательском адаптере сделайте следующее

public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
  ...

    if (isExpanded) {
        groupHolder.img.setImageResource(R.drawable.group_down);
    } else {
        groupHolder.img.setImageResource(R.drawable.group_up);
    }
  ...

}
118
ответ дан Ahmed Hafez 11 February 2014 в 15:37
поделиться

Еще одно решение: 1) Сначала установите groupIndicator в ExpandableListView равным @null:

<ExpandableListView [...] 
    android:groupIndicator="@null" />

2) Затем создайте файл group_indicator.xml со следующими подробностями:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/down_icon" android:state_selected="false"></item>
    <item android:drawable="@drawable/up_icon" android:state_selected="true"></item>
    <item android:drawable="@drawable/down_icon"></item>
</selector>

3) Затем создайте макет group_header.xml со следующими деталями и накачайте этот макет в методе getGroupView () ExpandableListAdapter.java:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">

    <TextView
        android:id="@+id/tvHeader"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:textColor="@color/white"
        android:layout_centerVertical="true"
        android:textSize="16sp"/>

    <ImageView
        android:id="@+id/ivGroupIndicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/group_indicator"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"/>
</RelativeLayout>

3) В методе getGroupView () вашего класса ExpandableListAdapter.java просто установите следующее:

ivGroupIndicator.setSelected(isExpanded);

При таком подходе ваши down_icon и up_icon будут работать правильно. Надеюсь, это поможет.

13
ответ дан user1182217 11 February 2014 в 15:37
поделиться

В вашем файле groupcustom.xml вы можете использовать Relativelayout и поместить это изображение в

android:alignParentRight = "true";
-12
ответ дан Mehul Ranpara 11 February 2014 в 15:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: