アプリケーションでクイックアクションUIパターンを使用する予定です。 AndroidクイックアクションUIパターン クイックアクションウィンドウには、固定するピボットビューが必要です。
quickAction.show(View pivotView);
メニュー項目にクイックアクションを使用する予定で、クリックされた項目にアクセスできます。しかし、問題は、クイックアクションにビューを渡すことができるように、メニュー項目からビューを参照する必要があることです。
選択されているmenuItemのビューへの参照を取得するにはどうすればよいですか。
これを実現するには、メニュー項目にxmlのactionViewClassプロパティを指定します。そうすると、必要なピボットビューを取得できます。コードは次のようになります
<item
Android:id="@+id/menu_find"
Android:showAsAction="ifRoom"
Android:actionViewClass="Android.widget.ImageButton"
/>
OnCreateOptionsMenuでこれを行います
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu_search, menu);
locButton = (ImageButton) menu.findItem(R.id.menu_find).getActionView();
locButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
createPopup();
mQuickAction.show(v);
}
});
return true;
}
古い質問ですが、actionViewClass
属性にいくつかの問題が発生しました。後でこれに遭遇した人のために...
onOptionsItemSelected
でfindViewById(R.id.mnu_item)
を呼び出すと、View
アンカーが返されます。
QuickActions
上のMenuItems
は良い設計ではありませんが、カスタム背景を使用してサブメニューを実装する最も簡単な方法であることがわかりました。
メニュー項目の参照ビューを取得にするには、これを行う必要があります。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.section, menu);
new Handler().post(new Runnable() {
@Override
public void run() {
final View menuItemView = findViewById(R.id.action_preview);
// SOME OF YOUR TASK AFTER GETTING VIEW REFERENCE
}
});
return true;
}
他の理由で(私が望んでいたように)メニュービュー項目を見つけたい人のための更新。
AppCompatのツールバーにアクセスして使用する場合は、方法があります。これは最も効率的な方法ではありませんが、メニュー項目のビューにアクセスするために見つけた最も簡単な方法です。
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
// Find Menu
for (int toolbarChildIndex = 0; toolbarChildIndex < toolbar.getChildCount(); toolbarChildIndex++) {
View view = toolbar.getChildAt(toolbarChildIndex);
// Found Menu
if (view instanceof ActionMenuView) {
ActionMenuView menuView = (ActionMenuView) view;
// All menu items
for (int menuChildIndex = 0; menuChildIndex < menuView.getChildCount(); menuChildIndex++) {
ActionMenuItemView itemView = (ActionMenuItemView) menuView.getChildAt(menuChildIndex);
// Do something to itemView...
}
}
}
}
メインアクティビティクラスでは、onOptionsItemSelected(...)メソッドをオーバーライドするのが最適です。以下のようなものでなければなりません:
public boolean onOptionsItemSelected(MenuItem item) {
// the id is of type int
int someId = item.getItemId();
// can use an if() or switch() statement to check if id is selected
//a Toast message can be used to show item is selected
}
次のようなメニュー項目への参照を取得できます。
MenuItem btnFavorites = menu.findItem(R.id.action_favorite);
そして、あなたがそれを使って何でもやります。例えば。アイコンを次のように変更します。
btnFavorites.setIcon(R.drawable.ic_favorite_false);