1

アクションモードを使用してコンテキストメニューを取得しようとしています。アクションモードでは、リストビューでアイテムを長押しして選択できます。この参照に従って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

            }
        });

前もって感謝します!

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の答えは素晴らしいです。必要なのが、1つの要素をロングクリックして選択する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 に答える