Странное поведение ExpandableListAdapter

173
24 ноября 2018, 00:50

Имеется ExpandableListView, так он инициализирован:

// Находим наш list
    ExpandableListView listView = (ExpandableListView)findViewById(R.id.exListView);
    //Создаем набор данных для адаптера
    ArrayList<ArrayList<String>> groups = new ArrayList<ArrayList<String>>();
    ArrayList<String> children1 = new ArrayList<String>();
    ArrayList<String> children2 = new ArrayList<String>();
    children1.add("Child_1");
    groups.add(children1);
    children2.add("Child_1");
    groups.add(children2);
    //Создаем адаптер и передаем context и список с данными
    ExpListAdapter adapter = new ExpListAdapter(getApplicationContext(), groups);
    listView.setAdapter(adapter);

Вот класс ExpListAdapter :

class ExpListAdapter extends BaseExpandableListAdapter {
private ArrayList<ArrayList<String>> mGroups;
private Context mContext;
public ExpListAdapter (Context context,ArrayList<ArrayList<String>> groups){
    mContext = context;
    mGroups = groups;
}
@Override
public int getGroupCount() {
    return mGroups.size();
}
@Override
public int getChildrenCount(int groupPosition) {
    return mGroups.get(groupPosition).size();
}
@Override
public Object getGroup(int groupPosition) {
    return mGroups.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
    return mGroups.get(groupPosition).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}
@Override
public boolean hasStableIds() {
    return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                         ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.exp_group_view, null);
    }
    if (isExpanded){
        //Изменяем что-нибудь, если текущая Group раскрыта
    }
    else{
        //Изменяем что-нибудь, если текущая Group скрыта
    }
    if (groupPosition==0){
        TextView textGroup = (TextView) convertView.findViewById(R.id.textGroup);
        textGroup.setText("Обмен");
    }else if(groupPosition == 1){
        TextView textGroup = (TextView) convertView.findViewById(R.id.textGroup);
        textGroup.setText("Настройки");
    }

    return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                         View convertView, ViewGroup parent) {
    if(groupPosition==0){
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.exp_child_view_exchange, null);
        }
        //Тут можно навешать события на элементы exp_child_view_exchange
    }else if (groupPosition == 1){
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.exp_child_view_settiong, null);
        }
        //Тут можно навешать события на элементы exp_child_view_settiong
    }

    return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

}

В методе getChildView я исходя из позиции группы определяю, что в группе выводить, в первой группе у меня 5 кнопок выводится,а во второй EditText. Так вот собственно в чем проблема. Если, после открытия активности, открыть сначала первую группу, а потом вторую, то все отлично, выводится все как нужно. Но если открыть сначала вторую, а потом первую, то в первой и второй группе почему-то оказывается содержимое второй группа. Если убрать вот эти проверки if(convertView == null), то тоже все отлично, но при открытии группа заполняется снова, в связи с чем теряется все что ввел пользователь... я так понимаю, когда сначала открывается вторая группа, то почему-то первая группа тоже инициализируется вьюшкой... как этого избежать?

READ ALSO
Как сделать 2 колонки на Flexbox

Как сделать 2 колонки на Flexbox

Как при помощи флекс-технологии построить 2 колонки одинаковой ширины? При этом элементы внутри колонок не должны переносится на следующую...

205
Как вставить разрыв страницы (переход на новую строчку) в ячейке HTML таблицы

Как вставить разрыв страницы (переход на новую строчку) в ячейке HTML таблицы

Делаю вывод html страницы в RubyOnRails проекте и столкнулся с такой проблемойЕсть ячейка таблицы в которую я вывожу строку, например "значение1,...

210
Клонирование элементов навигации?

Клонирование элементов навигации?

Помогите, разобраться почему по клику на кнопку Каталог, мне после ссылок bl_catalogProducts__link сыпяться только значения Первого списка из навигации...

196
Вывод определенных элементов массива

Вывод определенных элементов массива

Есть одномерный массив a, нужно вывести все элементы массива начиная от K и заканчивая N элементом массива:

176