Java 长按GridView时未调用onCreateActionMode?

Java 长按GridView时未调用onCreateActionMode?,java,android,gridview,Java,Android,Gridview,所以我有一个GridView,我希望能够长按元素以启用上下文操作栏,对吗?我查阅了很多教程,包括和,以及其他一些教程,它们都说明在使用CHOICE_MODE_MULTIPLE_MODE时,MultichoiceModelListener应该在长按时自动使用 我看到很多教程都在使用这个(就是这样)并且它是有效的,但是当我长时间按GridView中的元素时,CAB不会启动(也不会调用onCreateActionView),我完全不知道为什么 这是我的GridView代码 receiptGridVie

所以我有一个GridView,我希望能够长按元素以启用上下文操作栏,对吗?我查阅了很多教程,包括和,以及其他一些教程,它们都说明在使用CHOICE_MODE_MULTIPLE_MODE时,MultichoiceModelListener应该在长按时自动使用

我看到很多教程都在使用这个(就是这样)并且它是有效的,但是当我长时间按GridView中的元素时,CAB不会启动(也不会调用onCreateActionView),我完全不知道为什么

这是我的GridView代码

receiptGridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
            receiptGridView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
                //                int count = 0;
                ArrayList<Receipt> tmp = new ArrayList();
                @Override
                public boolean onCreateActionMode(android.view.ActionMode actionMode, Menu menu) {
                    Log.d("DEBUG","Created action mode!");
                    MenuInflater inflater = actionMode.getMenuInflater();
                    inflater.inflate(R.menu.context_delete, menu);
                    return true;
                }

                @Override
                public void onItemCheckedStateChanged(android.view.ActionMode actionMode, int i, long l, boolean b) {

                    receiptGridView.setSelection(i);
                    Receipt r = (Receipt) listAdapter.getItem(i);
                    if(b) {
                        tmp.add(r);
                    }
                    else {
                        tmp.remove(r);
                    }
                    actionMode.setTitle("Delete Items");
                    actionMode.setSubtitle(receiptGridView.getCheckedItemCount() + " items selected.");
                }

                @Override
                public boolean onPrepareActionMode(android.view.ActionMode actionMode, Menu menu) {
                    return true;
                }

                @Override
                public boolean onActionItemClicked(android.view.ActionMode actionMode, MenuItem menuItem) {
                    switch (menuItem.getItemId()) {
                        case R.id.action_delete:
                            removeReceipts(tmp);
                            actionMode.finish(); // Action picked, so close the CAB
                            return true;
                        default:
                            return false;
                    }
                }

                @Override
                public void onDestroyActionMode(android.view.ActionMode actionMode) {

                }
            });
receiptGridView.setChoiceMode(GridView.CHOICE\u MODE\u MULTIPLE\u MODE);
receiptGridView.SetMultichoiceModelListener(新的AbsListView.MultichoiceModelListener(){
//整数计数=0;
ArrayList tmp=新的ArrayList();
@凌驾
公共布尔onCreateActionMode(android.view.ActionMode操作模式,菜单){
d(“调试”,“创建操作模式!”);
MenuInflater充气器=动作模式。getMenuInflater();
充气机。充气(R.menu.context\u删除,菜单);
返回true;
}
@凌驾
public void onItemCheckedStateChanged(android.view.ActionMode ActionMode,int i,long l,boolean b){
receiptGridView.setSelection(i);
收据r=(收据)listAdapter.getItem(i);
如果(b){
tmp.add(r);
}
否则{
tmp.移除(r);
}
actionMode.setTitle(“删除项目”);
actionMode.setSubtitle(receiptGridView.getCheckedItemCount()+“已选择项”);
}
@凌驾
公共布尔onPrepareActionMode(android.view.ActionMode操作模式,菜单){
返回true;
}
@凌驾
公共布尔值onActionItemClicked(android.view.ActionMode ActionMode,MenuItem MenuItem){
开关(menuItem.getItemId()){
案例R.id.行动\删除:
去除剂(tmp);
actionMode.finish();//已拾取操作,因此关闭驾驶室
返回true;
违约:
返回false;
}
}
@凌驾
public void onDestroyActionMode(android.view.ActionMode ActionMode){
}
});
事实证明,要真正触发操作菜单,您必须在gridview上调用setItemChecked,所以我刚刚在longpress上对容器视图执行了此操作

holder.container.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                if (ma.mActionMode == null) {


                    // the line that triggers it  
                    ma.receiptGridView.setItemChecked(position, true);


                    v.setBackgroundResource(b ? R.color.color_ce5a5a : R.drawable.receipt_item_bg);
                    view.setBackgroundColor(Color.parseColor("#ce5a5a"));
                }
                return false;
            }
        });