При каких условиях getChildView() вызывается в ExpandableListAdapter

В моем приложении getChildView() внутри моего ExpandableListAdapter не вызывается, в то время как адаптер возвращает правильное количество дочерних элементов (при вызове getChildrenCount()). Мой вопрос; какие условия необходимо выполнить, чтобы ExpandableListAdapter расширил свои дочерние элементы?


person D.Ginzbourg    schedule 09.08.2013    source источник
comment
Ну, я лично не использовал этот класс, но что вы делаете, что он не вызывает getChildView(). Я бы предположил, что он вызывается, когда ему нужно подготовиться к отображению View. Поэтому, если родитель не расширен, для его вызова не было бы причин, поскольку он знает, что ему не нужно показывать. Но опять же, в каких условиях вы это тестируете?   -  person Andy    schedule 09.08.2013
comment
У меня есть ресурсы соответствующего кода по адресу: вопрос о StackOverflow . Надеюсь, это ответ на ваш вопрос   -  person D.Ginzbourg    schedule 09.08.2013
comment
Я точно знаю одно условие, и если childrenCount возвращает 0, функция не будет вызываться (по понятным причинам)   -  person D.Ginzbourg    schedule 09.08.2013
comment
Хм, я понимаю, почему вы задаете этот вопрос. Прежде чем я даже потрудился дать вам несколько советов, как вы проверяете, что getChildView не вызывается. отладчик или ведение журнала?   -  person Andy    schedule 09.08.2013
comment
Отладчик, я уже вижу, к чему все идет. Я должен использовать ведение журнала, правильно?   -  person D.Ginzbourg    schedule 10.08.2013
comment
Я использовал небольшой диалог, который появлялся при вызове getChildView. Он никогда не всплывал. Я протестировал его на getGroupView, и он появился при вызове этого метода.   -  person D.Ginzbourg    schedule 10.08.2013
comment
Ну нет. Вы можете посмотреть источник ExpandableListAdapter. Он находится в папке Android SDK. Просто поищите примеры, когда это называется. Кажется, если он никогда не вызывался, вы что-то неправильно связываете. Я предполагаю, что вы используете пользовательские представления. В основном посмотрите, что делает источник, и выясните это в сочетании с отладкой. Ведение журнала — это нормально, но отладка дает вам немного больше возможностей увидеть, что происходит. Хороший способ убедиться, что это ваша реализация, - создать простой пример без каких-либо пользовательских представлений и отладить его, чтобы увидеть, что вызывается, когда.   -  person Andy    schedule 12.08.2013


Ответы (3)


вызывается, когда у вас есть более 1 элемента в группах и в дочерних элементах, я имею в виду, когда getGroupCount возвращает значение больше 0

person Fernando Rocha    schedule 29.01.2015

Метод getGroupCount() сообщает вам, сколько групп будет в вашем ExpandableListView, а метод getChildrenCount(int groupPosition) сообщает вам, сколько дочерних элементов будет в соответствующей группе. Таким образом, пока метод getChildrenCount не вернет значение 1 или больше 1, до тех пор, пока дочерние представления не будут видны.

Еще одна вещь, которая также действительно имеет значение, когда ваши дочерние представления не становятся видимыми, - это «высота расширяемого представления списка должна быть match_parent, если ваше расширяемое представление списка находится в любом другом макете, тогда эта высота макета также должна быть match_parent».

person Omji Mehrotra    schedule 13.01.2016

Ваша проблема не в getChildView(), мой друг, а в макете.

Точная проблема связана с android:layout_height="" вашего расширяемого списка, который вырезает дочерние элементы.

Используйте это как макет:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#FFFFFF"
tools:context="/*your activity*/" >

<ExpandableListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:childDivider="@android:color/transparent"
    android:dividerHeight="0dp" />

person The Great MA    schedule 30.07.2014