1

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

我的问题是,即使正在播放项目长按动画,ActionMenu 也不会膨胀。

列表视图代码:

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

            }
        });

提前致谢!

4

2 回答 2

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

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

请注意,该项目演示了通过 ActionBarSherlock 使用动作模式。

于 2012-10-17T14:44:27.493 回答
1

CommonsWare 的回答很棒。如果您想要的是通过长按来选择一个元素的 MultiChoiceModeListener,则此代码可能会对您有所帮助:

public class MyFragment extends Fragment implements MultiChoiceModeListener{
    private ListView mListView;
    // ...

    public void onViewCreated(View view, Bundle savedInstanceState) {
        mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
        mListView.setMultiChoiceModeListener(this);

        mListView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {                
                mListView.setItemChecked(arg2, true);
            }
        });
    }

在我的情况下,我只需单击一下即可,但您可以将 OnItemClickListener 更改为 OnItemLongClickListener 或您喜欢的任何其他内容。

于 2014-08-20T08:14:42.953 回答