Расширяемый список Android для просмотра - onClickListener для кнопок в дочернем элементе с постоянными состояниями

В настоящее время у меня есть проблема с созданием моего ExpandableListView. Я не уверен, что происходит в данный момент, но я объясню, что я пытаюсь сделать.

Я программно распределяю еду, приходящуюся на определенный день. Внутри каждого приема пищи (название группы) есть ребенок, который содержит кнопку голосования и заказа. Обе они изменены на «Упорядоченные» когда заказ сделан на еду. Если сделан другой заказ, кнопка предыдущего ордера возвращается к «заказу». состояние и выбранный переходит в заказанный. Это то же самое для голосования. Я делаю это, устанавливая прослушиватель по нажатию на мои кнопки, которые перебирают все остальные кнопки и устанавливают для их текста «порядок» / «голос». и установите текущие кнопки текста в порядке.

Это прекрасно работает в некоторых крайне редких случаях - но в большинстве случаев, когда я заказываю / голосую за товар, он меняет выбранный на «заказанный». и последний элемент в моем расширяемом представлении списка также упорядочен. Затем, если я закажу, скажем, 3-й элемент, закройте и снова откройте второй элемент, он также изменится на заказанный и наоборот. Иногда все они меняются обратно на заказ или все меняются на заказанные. Мне трудно понять, почему это может происходить.

Я полагаю, что это может быть связано с функцией getChildView. Как и когда я пересекаю список, открывающий каждый элемент, представление никогда не устанавливается для последнего элемента, даже если ему были выделены соответствующие данные.

Я неправильно понимаю основную концепцию ExpandableListView или есть что-то еще.

Вот функция getChildView, которая, по моему мнению, может быть неисправна. Я также приведу ссылки на другие соответствующие классы ниже. Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать.

//Static class view holder
static class ViewHolder {
    protected Button oBut;
    protected Button vBut;
    protected TextView description;
}

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    //Getting the appropriate child for the group and position
    ExpandListChild child = (ExpandListChild) getChild(groupPosition, childPosition);

    View view = null;

    //Set up if doesn't exist
    if (convertView == null) {
        Log.d("OnClickListener", "groupPosition: " + groupPosition + " childPosition: " + childPosition);
        Log.d("OnClickListener", "View being set up for: " + child.getName() + " desc: " + child.getDescription());

        LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        view = infalInflater.inflate(R.layout.expandlist_child_item_todays, null);

        //Attempt at viewholder
        final ViewHolder holder = new ViewHolder();
        holder.description = (TextView) view.findViewById(R.id.mealDescription);
        holder.vBut = (Button)view.findViewById(R.id.vote);
        holder.oBut = (Button)view.findViewById(R.id.order);

        view.setTag(holder);
    }
    else {
        view = convertView;
    }

    ViewHolder holder = (ViewHolder) view.getTag();

    holder.description.setText(child.getDescription());
    holder.description.setTag(child.getTag());

    holder.oBut.setOnClickListener(new OrderOnClick(groups, (Activity)context, holder.oBut, view, child));
    holder.vBut.setOnClickListener(new VoteOnClick(groups, (Activity)context, holder.vBut, view, child));

    return view;
}

ExpandListAdapterTodays (расширяет и расширяет мой BaseExpandableListAdapter)

ExpandListAdapter (расширяет BaseExpandableListAdapter)

VoteOnClick (Класс, который реализует изменение текста кнопки после успешного голосования)

Ответы на вопрос(1)

Ваш ответ на вопрос