Android設計ガイドラインに準拠するために、私は小さな問題にぶつかっています。
複数のアイテムを長押し(複数選択)して、それらに対して一括アクションを実行できるアイテムのリストが欲しい。
設計ガイドラインでは、このためにコンテキストアクションバーを使用することをお勧めしています。問題は、API 7との互換性を維持しようとしていることです(私の電話は現在2.3.3であるため)。
ActionBarSherlockを使用して他のアクションバーのものを取得していますが、コンテキストアクションバーを起動する方法も、ボタンを任意に追加する方法もわからないようです。 ABSのActionBarに。タブを実行できるので、それが答えかもしれませんが、複数選択を許可しようとしているので、通常のモーダルコンテキストメニューは使いたくありません。
コンテキストアクションバーの設定は、XMLに関する限り、「通常の」ActionBarアイテムの設定と同じです。 開発者ガイドのこの例では、すべてを説明しています 。
ActionBarSherlockを使用するには、デフォルトのAndroidコールバックをActionBarSherlockで編集されたコールバックに置き換えます(例:Android.View.ActionMode
、 使用する com.actionbarsherlock.view.ActionMode
)。
これは遅い答えですが、人々が行き詰まるのを助けると思います。
コンテキストアクションバーを開くのは実際には非常に簡単で、アクティビティのどの時点でも呼び出すだけです。
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" />
ActionBarSherlockには独自のActionModeの実装がありますが、そのライフサイクルを手動で制御する必要があります。これについて tutorial と書きました。
私は同じ問題に直面していました。 このリンク を見つけたときに解決しました。基本的に、ActionMode.Callback
を実装するコールバッククラスを作成する必要があります。このクラスでは、コンテキストアクションバーでアクションバーを膨らませます。選択(または長押し)ごとに、startActionMode
メソッドを使用してコールバックを開始します。動作するコードのリンクを参照してください=]
EDIT:/samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.Java
の下にSherlockのサンプルの例もあります
私はあなたの質問の第二部に答えます。以下は、ActionBarSherlockライブラリを使用してビューインスタンス(以下のコードのボタン)アクションバーを追加する方法の例です。
@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);
}