区段TAG值错误 [英] wrong section TAG value
问题描述
我试图从第一节中删除一些行,从第二节中删除一些行,但是
I'm try to remove some rows from section one and some from section two, but
sectionAdapter.notifyItemRemovedFromSection(TAG, key);
TAG总是返回第二部分列表字符串TAG,但是我被选为第一列表中的行
TAG always return the 2st section list string TAG, but I was selected row in first list
这是完整的课程代码:
class ContactsSection extends StatelessSection {
final String TAG;
String title;
List<Item> list;
ItemViewHolder row;
HeaderViewHolder MainRow;
ContactsSection(String title, ArrayList<Item> list) {
super(R.layout.shopping_row_item_header, R.layout.shopping_row_item);
this.title = title;
this.list = list;
this.TAG = title;
}
@Override
public int getContentItemsTotal() {
return list.size();
}
@Override
public RecyclerView.ViewHolder getItemViewHolder(View view) {
return new ItemViewHolder(view);
}
@Override
public void onBindItemViewHolder(final RecyclerView.ViewHolder holder, final int position) {
final ItemViewHolder itemHolder = (ItemViewHolder) holder;
final Item name = list.get(position);
itemHolder.tvItem.setText(name.name);
((ItemViewHolder) holder).IntegBOX.setChecked(name.checked);
((ItemViewHolder) holder).IntegBOX.setTag(position);
deleteAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Iterator it = selectedCheckBox.entrySet().iterator();
if (!it.hasNext()) {
new makeDialog().makeDialog(mActivity, mActivity.getResources().getString(R.string.share_no_data));
} else {
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
int key = (Integer) pair.getKey();
if ((Boolean) pair.getValue()) {
list.remove(key);
// problem Here
sectionAdapter.notifyItemRemovedFromSection(TAG, key);
}
}
chooseAllradioButton.setSelected(false);
}
}
});
itemHolder.IntegBOX.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Set the button's appearance
((CheckBox) v).setChecked(!((CheckBox) v).isChecked());
// if button Already in checked statue
if (((CheckBox) v).isChecked()) {
Iterator it = selectedCheckBox.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
int key = (Integer) pair.getKey();
if (key == (Integer) v.getTag()) {
it.remove();
}
// set it as false
((CheckBox) v).setChecked(false);
}
} else {
// Otherwise set it to true and add it to hashMap
((CheckBox) v).setChecked(true);
selectedCheckBox.put((Integer) v.getTag(), true);
}
Toast.makeText(mActivity, String.format("Clicked on position #%s of Section %s", sectionAdapter.getPositionInSection(itemHolder.getAdapterPosition()), title), Toast.LENGTH_SHORT).show();
}
});
}
@Override
public RecyclerView.ViewHolder getHeaderViewHolder(View view) {
return new HeaderViewHolder(view);
}
@Override
public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) {
HeaderViewHolder headerHolder = (HeaderViewHolder) holder;
headerHolder.tvTitle.setText(title);
}
// Remove All Btn Fuc
class HeaderViewHolder extends RecyclerView.ViewHolder {
private final TextView tvTitle;
HeaderViewHolder(View view) {
super(view);
tvTitle = (TextView) view.findViewById(R.id.DishName);
}
}
class ItemViewHolder extends RecyclerView.ViewHolder implements CompoundButton.OnCheckedChangeListener {
private final View rootView;
private final TextView tvItem;
private final CheckBox IntegBOX;
ItemViewHolder(View view) {
super(view);
rootView = view;
tvItem = (TextView) view.findViewById(R.id.DishName);
IntegBOX = (CheckBox) view.findViewById(R.id.chooseDish);
IntegBOX.setOnCheckedChangeListener(this);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// int position = getAdapterPosition();
// list.get(position).checked = isChecked;
}
}
}
private class Item {
String name;
boolean checked;
Item(String name) {
this.name = name;
checked = false;
}
}
添加部分代码:
for (int d = 0; d < DishesIngredientsShoppingList.size(); d++) {
contacts = new ArrayList<>();
for (int i = 0; i < DishesIngredientsShoppingList.get(d).getGroups().length; i++) {
for (int g = 0; g < DishesIngredientsShoppingList.get(d).getGroups()[i].getIngredients().length; g++) {
if (Language)
contacts.add(new Item(DishesIngredientsShoppingList.get(d).getGroups()[i].getIngredients()[g].getName()));
else
contacts.add(new Item(DishesIngredientsShoppingList.get(d).getGroups()[i].getIngredients()[g].getNameEnglish()));
}
}
sectionAdapter = new SectionedRecyclerViewAdapter();
ArrayList<Item> contacts = new ArrayList<>();
// ArrayList<String> dishNames = new ArrayList<>();
mRecyclerView.setLayoutManager(new LinearLayoutManager(mActivity));
if (Language)
sectionAdapter.addSection(DishesIngredientsShoppingList.get(d).getName(), new ContactsSection(DishesIngredientsShoppingList.get(d).getName(),contacts));
else
sectionAdapter.addSection(DishesIngredientsShoppingList.get(d).getEnglishName(), new ContactsSection(DishesIngredientsShoppingList.get(d).getEnglishName(),contacts));
}
mRecyclerView.setAdapter(sectionAdapter);
注意:我在操作栏中没有设置删除按钮,而不是在每一行中都设置了删除按钮 因此,当代码运行时,代码无法检测到当前行节标记
note : i have delete button is setup at action bar not in every row so when the code runs the code can not detect current row section tag
推荐答案
您正在存储该selectedCheckBox
映射中所有部分的所有选定复选框,但是当点击deleteAll
按钮时,您会从所在的部分.
You are storing all the selected checkboxes from all sections in this selectedCheckBox
map, but when the deleteAll
button is tapped you call notifyItemRemovedFromSection
from the section where it is in.
您将不得不更改您的selectedCheckBox
地图,以同时存储该复选框所属的标签"部分,然后在调用notifyItemRemovedFromSection
时可以传递正确的标签".
You will have to change your selectedCheckBox
map to also store which section 'tag' that checkbox belongs to, then when you call notifyItemRemovedFromSection
you can pass the correct 'tag'.
这篇关于区段TAG值错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!