27

これは、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関数では、呼び出したsetContentView。私はしますがfavButton = (MenuItem) this.findViewById(R.id.fav_button);、これはnullを返します。

ただし、onOptionsItemSelected関数で適切なオブジェクトを返します。

それが違いを生むなら、私はActionBarSherlockを使用しています。

他のfindViewByIdがnullの質問を返すことで提案されたさまざまなオプションを試しましたが、問題は解決していません。

4

5 に答える 5

50

それ以外の

favButton = (MenuItem) this.findViewById(R.id.fav_button);  

getMenuInflater().inflate(R.menu.activity_main, menu); の後の onCreateOptionsMenu で。

favButton = menu.findItem(R.id.fav_button);
于 2013-05-11T18:52:00.500 に答える
3

menu.findItem() を使用してメニューを取得します。ただし、これはメニューが膨らんだ後に行う必要があります。

また、コメントで質問に答えるには、 onPrepareOptionsMenu を使用してメニューの状態を設定できます。このメニューが一度だけ更新される場合は、一度だけ呼び出される onCreateOptionsMenu も使用できます。

于 2015-05-20T17:35:22.757 に答える