我如何通过上下文操作栏在Recyclerview中选择多个项目[重复]

问题描述 投票:0回答:1

我正在尝试使用上下文操作栏从recyclerview中选择多个项目,我的上下文操作栏会正确膨胀,但同时选择多个项目时出现问题。我想选择多个项目并对其集体执行操作]

我的代码

ActionModeCallback

 private static boolean multiSelect = false;
private static ArrayList<Integer> selectedItems = new ArrayList<Integer>();

private ActionMode.Callback actionModeCallbacks = new ActionMode.Callback() {
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        multiSelect = true;
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.contextual_menu_message, menu);
        return true;
    }

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

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {

        switch (item.getItemId()) {
            case R.id.copy:
                Toast.makeText(mContext, "Copy Clicked", Toast.LENGTH_SHORT).show();
                mode.finish(); // Action picked, so close the CAB
                return true;

            case R.id.DeleteChat:
                Toast.makeText(mContext, "Delete Clicked", Toast.LENGTH_SHORT).show();
                mode.finish(); // Action picked, so close the CAB
                return true;

            default:
                return false;
        }
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
       // actionMode = null;
        multiSelect = false;
        selectedItems.clear();
        notifyDataSetChanged();

    }
};

OnBinViewHolder

 @Override
public void onBindViewHolder(@NonNull MessageAdapter.ViewHolder holder, int position) {

    Chat chat = mChat.get(position);
    holder.show_message.setText(chat.getMessage());

    if (imageurl.equals("default")) {
        holder.profile_image.setImageResource(R.drawable.user2);
    } else {
        Glide.with(mContext).load(imageurl).into(holder.profile_image);
    }

    String timeA = getTimeDate(mChat.get(position).getTimestamp());
    // String time = longToDateString(mChat.get(position).getTimestamp(),"HH:mm"};
    holder.timeText.setText(timeA);


    boolean isSeen = chat.isIsseen();

    if (isSeen) {
        //seen
        holder.Delivered.setImageResource(R.drawable.ic_check_black_24dp);

    } else {
        //not seen
        holder.Delivered.setImageResource(R.drawable.ic_check_black_24dp);


    }

    holder.show_message.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            ((AppCompatActivity)view.getContext()).startSupportActionMode(actionModeCallbacks);
            view.setSelected(true);
            return true;
        }
    });

   /*
    if (multiSelect){
        selectedItems.remove(mChat.get(position));
        holder.show_message.setBackgroundColor(Color.BLACK);
    }
    else {
        selectedItems.add(mChat.get(position));
        holder.show_message.setBackgroundColor(Color.BLACK);

    }

    */


    //holder.itemView.setBackgroundColor(selectedItems.get(position) ? 0x9934B5E4
      //      : Color.TRANSPARENT);



}
android android-layout android-recyclerview recycler-adapter
1个回答
1
投票

有一个解决方案有用的解决方案,用于在recyclerView中选择多个项目。

How to implement multi-select in RecyclerView?

© www.soinside.com 2019 - 2024. All rights reserved.