0

我正在尝试从第一节中删除一些行,从第二节中删除一些行,但是

sectionAdapter.notifyItemRemovedFromSection(TAG, key);

TAG 总是返回第 2 部分列表字符串 TAG,但我在第一个列表中被选中

这是完整的课程代码:

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);

注意:我在操作栏上设置了删除按钮,而不是在每一行中,所以当代码运行时,代码无法检测到当前行部分标签

4

1 回答 1

0

您正在存储此地图中所有部分的所有选定复选框selectedCheckBox,但是当deleteAll点击按钮时,您会notifyItemRemovedFromSection从它所在的部分调用。

您必须更改selectedCheckBox地图以存储该复选框所属的“标签”部分,然后当您调用时,notifyItemRemovedFromSection您可以传递正确的“标签”。

于 2017-05-03T10:39:05.053 回答