RecyclerView: как запустить контекстную панель действий CAB с помощью флажка?

У меня есть список RecyclerView CardViews, и я использую AppCompatActivity. Каждый CardView имеет флажок. Когда я нажимаю на флажок, я хотел бы запустить контекстную панель действий. Я хотел бы использовать OnCheckedChangeListener, и мне не повезло. Галочка правильно становится видимой при нажатии на флажок «chkSelected» и становится невидимой при повторном нажатии на «chkSelected». Что мне здесь не хватает?

public class MyRecylerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    ...    
    private static ActionMode.Callback actionModeCallback = new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            return false;
        }
        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return false;
        }
        @Override
        public void onDestroyActionMode(ActionMode mode) {
        }
    };
    ...
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_contact_item, parent, false);
        final ItemHolder itemHolder = new ItemHolder(view);

        return itemHolder;
    }

    private static class ItemHolder extends RecyclerView.ViewHolder {

        private CheckBox chkSelected;

        private ItemHolder(View itemView) {
            super(itemView);

            chkSelected = (CheckBox) itemView.findViewById(R.id.chkSelected);

            chkSelected.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked)
                      mActionMode = ((AppCompatActivity) buttonView.getContext()).startSupportActionMode(actionModeCallback);
                }
            }); 
}

Я также безуспешно пробовал OnClickListener() в ItemHolder(). Код ниже. Тост в onClick() отображается правильно, поэтому что-то не так с startSupportActionMode().

chkSelected.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(),"Checkbox was clicked",Toast.LENGTH_LONG).show();
                if(mActionMode == null) {
                    // Start the Contextual Action Bar (CAB) using the ActionMode.Callback defined above
                    mActionMode = ((AppCompatActivity) view.getContext()).startSupportActionMode(mActionModeCallback);
                }
            }
        });        

person AJW    schedule 21.11.2017    source источник


Ответы (1)


Решение состояло в том, чтобы настроить метод в onBindViewHolder(), который будет обновлять представления элементов для OnClickListeners в Itemholder().

person AJW    schedule 22.11.2017