Почему ExpandableListView изменяет настройки ChildView (Android)?

У меня вопрос по использованию ExpandableListView. В моем случае у меня есть два групповых и два дочерних представления, в то время как дочерние представления состоят из RelativeLayout с несколькими кнопками, TextViews и т. д. в нем. Например, при расширении второй группы сначала и внесении некоторых изменений в держатели представлений и последующем расширении первой группы ранее сделанные изменения автоматически применяются и к дочернему представлению первой группы, почему это происходит?

Я зарегистрировался, когда вызываются представления:

// Фрагмент с ExpandableListView в нем создан, convertViews группы 0 и 1 равны нулю

convertView == null, GroupView, groupPosition 0

convertView == null, GroupView, groupPosition 1

// сначала раскрывается вторая группа, convertView of Child имеет значение null

getChildView: позиция группы 1, дочерняя позиция 0 convertView == null, ChildView

// расширенная первая группа после того, как convertView of Child больше НЕ имеет значение null

getChildView: позиция группы 0, дочерняя позиция 0 convertView != null, ChildView

Похоже, что он использует convertView дочернего элемента второй группы, может быть, тег не распознает вид ведьмы?

ИЗМЕНИТЬ:

@Override
public View getChildView(final int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {

    if (LOG)
        Log.d(TAG, "getChildView: group position " + groupPosition + ", child position " + childPosition);

    final ViewHolder viewHolder;
    if (convertView == null) {
        viewHolder = new ViewHolder();
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_item_channel, null);

        if (LOG) Log.d(TAG, "convertView == null, ChildView");

        // add all the viewholders (...)
        viewHolder.connect = (ToggleButton) convertView.findViewById(R.id.connect_tog);
        viewHolder.channelOnOff = (Switch) convertView.findViewById(R.id.channel_switch);
        convertView.setTag(viewHolder);

    } else {
        if (LOG) Log.d(TAG, "convertView != null, ChildView");
        viewHolder = (ViewHolder) convertView.getTag();
    }

    return convertView;

}

Нет, я не меняю представления внешним адаптером, также класс ViewHolder является статическим классом.

Большое спасибо и ура, пингу


person user3914939    schedule 02.06.2015    source источник
comment
Вы создаете новый viewHolder при каждом проходе? Можете ли вы опубликовать больше кода?   -  person RaphMclee    schedule 02.06.2015
comment
Это похоже на проблему повторного использования представления. Можете ли вы опубликовать больше информации о методе getChildView? Я предполагаю, что вы не изменяете представления, внешние по отношению к адаптеру?   -  person Jay Soyer    schedule 03.06.2015
comment
Вы нашли какое-нибудь решение? Я сталкиваюсь с той же проблемой в случае групповых просмотров.   -  person gaurav jain    schedule 21.07.2015