我正在尝试使用上下文操作栏从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);
}
有一个解决方案有用的解决方案,用于在recyclerView中选择多个项目。