RecyclerView:如何使用复选框启动上下文操作栏CAB? [英] RecyclerView: how to start Contextual Action Bar CAB with a Checkbox?

查看:89
本文介绍了RecyclerView:如何使用复选框启动上下文操作栏CAB?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有CardViews的RecyclerView列表,并且正在使用AppCompatActivity.每个CardView都有一个复选框.当我单击复选框时,我想启动一个上下文操作栏.我想使用OnCheckedChangeListener并且没有运气.当单击"chkSelected"复选框时,该复选标记正确可见;而当再次单击"chkSelected"复选框时,该复选标记不可见.我在这里缺少什么?

I have a RecyclerView list of CardViews and am using AppCompatActivity. Each CardView has a checkbox. When I click on the checkbox I would like to start a Contextual Action Bar. I would like to use an OnCheckedChangeListener and am having no luck. The checkmark correctly becomes visible when the "chkSelected" Checkbox is clicked on and it becomes invisible when the "chkSelected is clicked on again. What am I missing here?

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

我还尝试了ItemHolder()中的OnClickListener()没有运气.代码如下. onClick()中的Toast显示正确,因此startSupportActionMode()一定有问题.

I also tried an OnClickListener() in the ItemHolder() with no luck. Code is below. The Toast in the onClick() is showing properly so there must be something wrong with the 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);
                }
            }
        });        

推荐答案

解决方案是在onBindViewHolder()中设置一种方法,该方法将更新Itemholder()OnClickListeners的项目视图.

Solution was to set up a method in onBindViewHolder() that would update the item views for the OnClickListeners in Itemholder().

这篇关于RecyclerView:如何使用复选框启动上下文操作栏CAB?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆