使用android studio中的上下文菜单在recyclerview中选择和删除多个数据

时间:2017-10-27 05:29:35

标签: java android android-recyclerview

我尝试使用带有上下文菜单的RecyclerView

1.在此之后创建Recyclerview和RecyclerView适配器

2.创建一个ActionBar菜单

3.Long Press RelativeLayout我调用Actionbar Function并传递View,holder和position

4.在函数中,我正在调用新方法ActionMode.Callback和他的oncreate方法我创建自定义menuInflater并调用动作调用我创建删除函数如何选择数据删除但它无法正常工作

5.在此之前,我创建了selectItem()如何将所选数据存储在整数ArrayList和动作调用方法中,它获取ArrayList并将其删除

6.现在我面临的问题是选择数据和完全取消选择数据

holder.RVRelativeLayout.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View view) {
                        Actionbar(view, holder, position);
                        MultiChoice = true;
                        selectItem(position, holder);
                        return true;
                    }
                });

    public void Actionbar(final View view, final ViewHolder holder, final int position) {

            final ActionMode.Callback callback = new ActionMode.Callback() {




            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                MultiChoice = true;
                mode.getMenuInflater().inflate(R.menu.context, menu);

                return true;
            }

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                int id = item.getItemId();

                if (id == R.id.action_delete) {

                    MultiChoice = false;
                    for (int i = 0; i < selectedItems.size(); i++) {
                        int n = selectedItems.get(i);
                        modelArrayList.remove(n);
                    }

                    Toast.makeText(context, "Total Delete items = " + selectedItems.size(), Toast.LENGTH_SHORT).show();

                    mode.finish();
                    return true;
                } else if (id == R.id.action_selectAll) {
                    Please Help for Selection All data and Deselect All Data 
                }
                return true;
            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {
                MultiChoice = false;
                selectedItems.clear();
                notifyDataSetChanged();
            }
        };

        ((AppCompatActivity) view.getContext()).startSupportActionMode(callback);

    }

    private void selectItem(int item, ViewHolder holder) {
        if (MultiChoice) {
            if (selectedItems.contains(item)) {
                selectedItems.remove(item);
                holder.RVRelativeLayout.setBackgroundColor(context.getResources().getColor(R.color.colorWhite));
                holder.RVItem.setTextColor(context.getResources().getColor(R.color.colorBlack));
            } else {
                selectedItems.add(item);
                holder.RVRelativeLayout.setBackgroundColor(context.getResources().getColor(R.color.colorPrimaryDark));
                holder.RVItem.setTextColor(context.getResources().getColor(R.color.colorWhite));
            }
        } else {
            Log.d(TAG, "Multi Choices Not True goto Details");
        }
    }

我想尝试选择所有数据并取消选择所有数据 我尝试了那段代码

public void selectAll(ViewHolder holder) {

        if (MultiChoice) {
            selectedItems.clear();
            for (int i = 0; i < modelArrayList.size(); i++) {
                if (!selectedItems.contains(i)) {
                    selectItem(i, holder);
                }
            }
        }
    }

    public void deSelectAll(ViewHolder holder) {

        if (MultiChoice) {
            for (int i = 0; i < modelArrayList.size(); i++) {
                selectItem(i, holder);
            }
            selectedItems.clear();
        }
    }
帮助我 感谢您的阅读和贡献

0 个答案:

没有答案