Расширяемый список 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 (Класс, который реализует изменение текста кнопки после успешного голосования)