具有动作模式的Android ListView单选模式

时间:2015-05-22 11:33:56

标签: android listview

我想创建一个包含一个ListView的应用程序屏幕。 当用户长按ListView项目时,我想显示动作模式。我使用以下代码实现它,我得到了我想要的结果。

一个问题是我想允许用户只选择一个列表项并在动作模式中选择上下文菜单项来执行操作。以下代码允许用户选择多个列表项。

android不支持ListView.CHOICE_MODE_SINGLE_MODAL选择模式吗?我花了很多时间在谷歌搜索,但无法找到任何实现的参考,这允许单一选择模式与上下文动作模式。请帮忙。

        mTestListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
        mTestListView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(ActionMode actionMode, int position, long l, boolean value) {
            }

            @Override
            public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
                MenuInflater inflater = actionMode.getMenuInflater();
                inflater.inflate(R.menu.context_menu_test_single_choice_mode, menu);
                return true;
            }

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

            @Override
            public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
                switch (menuItem.getItemId()) {
                    case R.id.action_done:
                        Toast.makeText(getActivity(), "Done", Toast.LENGTH_SHORT).show();

                        actionMode.finish();
                        adapter.notifyDataSetChanged();
                        return true;
                    default:
                        return false;
                }
            }

            @Override
            public void onDestroyActionMode(ActionMode actionMode) {
            }
        });
    }

1 个答案:

答案 0 :(得分:1)

在您的方法中添加此代码。此代码将检查项目计数。如果计数超过一个,它将删除除最后一个之外的其他项目。

     public void onItemCheckedStateChanged(ActionMode mode, int position,
                                          long id, boolean checked) {
        int selectCount = mList.getCheckedItemCount();

        if(selectCount > 1){

            SparseBooleanArray checkarr = mList.getCheckedItemPositions();
            for(int i=0;i<dataList.size();i++){
                /*
                check item is checked
                and not the last item
                * */
                if(checkarr.get(i) && position != i){
                    mList.setItemChecked(i, false);
                    break;
                }
            }
        }
    }

我在我的应用中尝试过。有用。 :)。希望这会对你有所帮助。