これは、ActionBarメニューのxmlファイルです。
_<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:id="@+id/fav_button"
Android:title="Favourite"
Android:icon="@drawable/unstar"
Android:showAsAction="always|withText" />
</menu>
_
私のonCreate
関数では、after呼び出しsetContentView
です。私はfavButton = (MenuItem) this.findViewById(R.id.fav_button);
を行いますが、これはnullを返します。
しかし、onOptionsItemSelected
関数で適切なオブジェクトを返します。
それが違いを生むのであれば、私はActionBarSherlockを使用しています。
他のfindViewByIdがnullの質問を返すことで提案されたさまざまなオプションを試しましたが、それらは私の問題を解決していません。
の代わりに
favButton = (MenuItem) this.findViewById(R.id.fav_button);
getMenuInflater()。inflate(R.menu.activity_main、menu);の後のonCreateOptionsMenu内。
favButton = menu.findItem(R.id.fav_button);
メニューを取得するには、menu.findItem()を使用します。しかし、これはメニューが膨らんだ後に行う必要があります。
また、コメントでqに回答するには、onPrepareOptionsMenuを使用してメニューの状態を設定できます。このメニューが1回限りの更新の場合、onCreateOptionsMenuも使用できます。これは1回だけ呼び出されます。
しかし、誰かが本当にView
を必要とし、MenuItem
を必要としない場合(たとえば、アニメーションを開始するためのさまざまな操作のため)、次の方法でそれを取得できます。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.your_menu_xml_file, menu);
...
new Handler().post(new Runnable() {
@Override
public void run() {
view = findViewById(R.id.menu_refresh_button);
// view.startAnimation(animation);
}
});
return true;
}
試す
final Toolbar toolbar = findViewById(R.id.toolbar);
Menu menu=toolbar.getMenu();
MenuItem item = menu.findItem(R.id.'name id item');
私のために働く。