Друзья, я использую расширяемый просмотр списка для отображения различных категорий и их подпунктов. Я использую флажок для выбора подэлементов, так что несколько подэлементов могут быть выбраны из различных категорий. Но здесь я сталкиваюсь с проблемой из-за повторного использования представлений. Когда я раскрываю категорию и ставлю флажок в подпунктах в ней, то, когда я нажимаю на другую категорию, в ней уже установлен какой-то флажок. Я предполагаю, что это происходит из-за повторного использования представлений. Я хочу решить эту проблему. Я сталкивался с подобной проблемой и с Recyclerview. Пожалуйста, ведите меня в этом. Заранее спасибо.
Я добавляю код моего адаптера для справки -
public class DayBookAdapter extends BaseExpandableListAdapter {
private Context _context;
private List<DayBookData> listDataHeader;
String msubItem,mcategory;
ArrayList<String> selecteditems;
ArrayList<String> selectedcategories;
public DayBookAdapter(Context context, List<DayBookData> listDataHeader, ArrayList<String> selectedItems,ArrayList<String> selectedcategories) {
this._context = context;
this.listDataHeader = listDataHeader;
this.selecteditems = selectedItems;
this.selectedcategories = selectedcategories;
}
@Override
public ArrayList<DayBookDetailsData> getChild(int groupPosition, int childPosititon) {
return this.listDataHeader.get(groupPosition).getCh_list();
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@SuppressLint("InflateParams")
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final DayBookDetailsData childText = listDataHeader.get(groupPosition).getCh_list().get(childPosition);
Boolean checkstatus = childText.isIschecked();
Log.d("checkstatus", "getChildView: "+checkstatus);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.day_book_details_data_item, null);
}
TextView item_txt_sub_cat_id = convertView.findViewById(R.id.item_id);
item_txt_sub_cat_id.setText(childText.getItem_id());
CheckBox item_txt_sub_cat_name = convertView.findViewById(R.id.item_name);
item_txt_sub_cat_name.setText(childText.getItem_name());
item_txt_sub_cat_name.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final CheckBox cb = (CheckBox) v;
msubItem = listDataHeader.get(groupPosition).getCh_list().get(childPosition).getItem_id();
mcategory = listDataHeader.get(groupPosition).getCategory_id();
if (cb.isChecked()) {
childText.setIschecked(true);
selecteditems.add(msubItem);
selectedcategories.add(mcategory);
Log.d("itemschecked", "items -"+selecteditems+"categories-"+selectedcategories);
} else {
childText.setIschecked(false);
selecteditems.remove(msubItem);
selectedcategories.remove(mcategory);
Log.d("itemschecked", "items -"+selecteditems+"categories-"+selectedcategories);
}
}
});
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return this.listDataHeader.get(groupPosition).getCh_list().size();
}
@Override
public DayBookData getGroup(int groupPosition) {
return this.listDataHeader.get(groupPosition);
}
@Override
public int getGroupCount() {
return this.listDataHeader.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@SuppressLint("InflateParams")
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
DayBookData headerTitle = getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.day_book_data_item, null);
}
TextView item_txt_category_id = convertView.findViewById(R.id.category_id);
TextView item_txt_category_name = convertView.findViewById(R.id.category_name);
item_txt_category_id.setText(headerTitle.getCategory_id());
item_txt_category_name.setText(headerTitle.getCategory_name());
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
Дайте мне знать, если вам нужно что-нибудь еще.
Спасибо.
Отредактировано -
Вот мой файл pojo для подразделов, кто-нибудь может сказать мне, какие изменения должны быть сделаны?
public class DayBookDetailsData {
private String item_name;
private String item_id;
public boolean isIschecked() {
return ischecked;
}
public void setIschecked(boolean ischecked) {
this.ischecked = ischecked;
}
boolean ischecked;
public DayBookDetailsData(String item_name, String item_id,boolean ischecked) {
this.item_name = item_name;
this.item_id = item_id;
this.ischecked = ischecked;
}
public String getItem_name() {
return item_name;
}
public String getItem_id() {
return item_id;
}
}
А вот мой код синтаксического анализа JSON, где я устанавливаю логическое значение -
bData.setCategory_id(jObjIn.getString("cat_id"));
bData.setCategory_name(jObjIn.getString("c_name"));
JSONArray jArrItemData = new JSONArray(jObjIn.getString("itemdata"));
for (int j = 0; j < jArrItemData.length(); j++) {
JSONObject jObjItem = new JSONObject(jArrItemData.getString(j));
try {
String item_id = jObjItem.getString("id");
String item_name = jObjItem.getString("item");
Boolean checkstatus = false;
bData.getCh_list().add(new DayBookDetailsData(item_name, item_id,checkstatus));
} catch (JSONException e) {
e.printStackTrace();
}
}
listData.add(bData);
}
exp_listview.setAdapter(new DayBookAdapter(getActivity(), listData,selectedItems,selectedcategory));
Я обновил файл в соответствии с вашим предложением, но он не помогает мне. Не могли бы вы сказать мне, что не так с моим кодом.