25

Androidの設計ガイドラインに従おうとすると、私は小さな問題にぶつかります。

いくつかの(複数選択)を長押しして、それらに対して一括アクションを実行できるアイテムのリストが必要です。

設計ガイドラインでは、これにコンテキストアクションバーを使用することを提案していますが、これは私が考えていたものと完全に同じように聞こえます。問題は、API 7との互換性を逆に維持しようとしていることです(私の電話は現在2.3.3であるため)。

ActionBarSherlockを使用して他のアクションバーのものを取得していますが、コンテキストアクションバーを起動する方法や、ABSのアクションバーにボタンを任意に追加する方法を理解していないようです。タブを実行できるようですが、それが答えかもしれませんが、複数選択を許可しようとしているので、通常のモーダルコンテキストメニューは必要ありません。

4

6 に答える 6

22

これは遅い答えですが、私は人々が立ち往生するのを助けると思います。

コンテキストアクションバーを開くのは実際には非常に簡単です。アクティビティのどの時点でも、次のように呼び出す必要があります。

startActionMode(mActionModeCallback);

フラグメントのようにメインのアクティビティに参加していない場合は、

getSherlockActivity().startActionMode(mActionModeCallback);

これがコールバックです

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback(){

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

    @Override
    public void onDestroyActionMode(ActionMode mode) {

    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_item1:
                return true;
            case R.id.menu_item2:
                //close the action mode
                //mode.finish();
                return true;
            default:
                mode.finish();
                return false;
       }
    }
};

xmlは、アクションバーのようなシンプルなメニューです。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/menu_item1"
      android:icon="@drawable/ic_item1"
      android:title="@string/ITEM1"
      android:showAsAction="always|withText" />

<item android:id="@+id/menu_item2"
      android:icon="@drawable/ic_item2"
      android:title="@string/ITEM2"
      android:showAsAction="always|withText" />

于 2012-09-20T07:34:55.253 に答える
16

コンテキストアクションバーの設定は、XMLに関する限り、「通常の」ActionBarアイテムの設定と同じです。開発者ガイドのこの例では、すべてを説明しています

ActionBarSherlockを使用するには、デフォルトのAndroidコールバックをActionBarSherlockで編集されたコールバックに置き換えます(たとえば、の代わりにAndroid.View.ActionModeを使用しますcom.actionbarsherlock.view.ActionMode)。

于 2012-03-13T19:40:48.580 に答える
2

ActionBarSherlockには独自のActionModeの実装がありますが、そのライフサイクルを手動で制御する必要があります。これについてのチュートリアルを作成しました。

于 2013-05-06T09:52:29.210 に答える
1

ロングクリックのサンプルについては、以下のリンクを参照してください。1つ目は、サンプルに必要なJavaコードです。2つ目は、レイアウトを定義する方法です。

于 2012-03-03T20:10:14.607 に答える
0

私はあなたの質問の2番目の部分に答えます。ActionBarSherlockライブラリを使用して任意のViewインスタンス(以下のコードのボタン)アクションバーを追加する方法の例を次に示します。

@Override
public boolean onCreateOptionsMenu(Menu menu) {

        refreshButton = (RotatingButton) LayoutInflater.from(this).inflate(R.layout.actionbar_customview_refresh, null);
        refreshButton.setOnClickListener(refreshButtonListener);

        MenuItem item = menu.add(0, android.R.id.copy, 0, getString(R.string.actionbar_refresh));
        item.setActionView(refreshButton);
        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_activity_action_bar, menu);
}
于 2012-03-03T21:53:27.243 に答える
0

私は同じ問題に直面していました。このリンクを見つけたときに解決しました。基本的に、を実装するコールバッククラスを作成する必要がありますActionMode.Callback。このクラスでは、アクションバーをコンテキストアクションバーで膨らませます。各選択(またはロングクリック)で、startActionModeメソッドを使用してコールバックを開始します。動作するコードについては、リンクを参照してください=]

編集: Sherlockのサンプルにも例があります/samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.java

于 2012-03-22T14:43:12.100 に答える