如何使用ListView获取操作模式

NiP*_*Pfi 1 android listview android-inflate action-menu

我正在尝试使用动作模式获取上下文菜单,我可以通过长按它来选择ListView中的项目.我根据此引用创建了一个MultiChoiceListener,并创建了一个ItemLongClickListener,它将一个项设置为已选中,这是操作模式根据此引用工作所需的.

我的问题是,即使项目长时间点击动画正在播放,ActionMenu也不会膨胀.

ListView代码:

final ListView listView = (ListView) findViewById(android.R.id.list);
        listView.setAdapter(adapter);
        listView.setLongClickable(true);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long id) {

            Cursor cursor = db.getSubject(id);
            String subject = null;
            try {
                subject = cursor.getString(cursor.getColumnIndex("subject"));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Intent intent = new Intent(Main.this, Marks.class);
            intent.putExtra("selected", subject);
            startActivity(intent);
            }
        });
        listView.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                listView.setItemChecked(arg2, true);
                return true;
            }

        });

        listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {
                // TODO Auto-generated method stub

            }

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

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position,
                    long id, boolean checked) {
                // TODO Auto-generated method stub

            }
        });
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Com*_*are 10

我没有看到任何代码实际启动动作模式.这是您OnItemLongClickListener需要做的事情,例如:

  @Override
  public boolean onItemLongClick(AdapterView<?> view, View row,
                                 int position, long id) {
    modeView.clearChoices();
    modeView.setItemChecked(position, true);

    if (activeMode == null) {
      activeMode=host.startActionMode(this);
    }

    return(true);
  }
Run Code Online (Sandbox Code Playgroud)

可以在以下网址找到使用此类操作模式手动演示的完整示例项目:https://github.com/commonsguy/cw-omnibus/tree/master/ActionMode/Manual

请注意,此项目演示了如何通过ActionBarSherlock使用操作模式.