1

アクション バーには 2 つのメニュー項目があります。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/refresh"
          android:title="Refresh"
          android:icon="@drawable/refresh"
          android:showAsAction="ifRoom" >
    </item>
    <item android:id="@+id/back"
          android:title="Back"
          android:icon="@drawable/back"
          android:showAsAction="ifRoom" >
    </item>
</menu>

メニュー項目「更新」を「非表示」にしようとしています。関数 refreshinvisible() を呼び出すと、更新項目は消えますが、アクション バーには 2 つの「戻る」項目が表示されます...なぜですか? (私はSherlockActionBarを使用しています)

私の refreshinvisible() 関数:

public void refreshinvisible(){
        MenuItem item = menu.findItem(R.id.refresh);
        item.setVisible(false);
}  

進め方を知っている人はいますか?

4

2 に答える 2

1

あなたはこれを読むことができます。

実行時のメニュー項目の変更

アクティビティが作成されると、上記のように、onCreateOptionsMenu()メソッドが1回だけ呼び出されます。システムは、アクティビティが破棄されるまで、このメソッドで定義したメニューを保持して再利用します。オプションメニューを最初に作成した後でいつでも変更したい場合は、onPrepareOptionsMenu()メソッドをオーバーライドする必要があります。これにより、現在存在するMenuオブジェクトが渡されます。これは、アプリケーションの現在の状態に応じてメニュー項目を削除、追加、無効化、または有効化する場合に役立ちます。

例えば

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
     super.onPrepareOptionsMenu(menu);
     MenuItem item = menu.findItem(R.id.refresh);
     item.setVisible(false);
     return true;
}
于 2013-02-04T18:05:45.890 に答える
1

メニューが表示される直前、つまりonCreateOptionsMenu()が呼び出される前に毎回呼び出されるonPrepareOptionsMenu()というメソッドがあります。アクティビティのinvalidateOptionsMenu()メソッドを使用して、オプション メニューの再描画をトリガーできます。したがって、特定の条件を考慮してメニューを簡単に再作成できます。

ここにいくつかのコードがあります。クラスのフィールドとして 2 つのブール値を定義します。次に例を示します。

private boolean showRefresh;
private boolean showBack;

メソッドをオーバーライドonPrepareOptionsMenu()し、それぞれに応じてメニュー項目の可視性を設定しますboolean

@Override
public boolean onPrepareOptionsMenu( Menu menu ) {

    super.onPrepareOptionsMenu( menu );

    menu.findItem( R.id.refresh ).setVisible( showRefresh );
    menu.findItem( R.id.back ).setVisible( showBack );

    return true;
}

いいえ、特定のメニュー項目の可視性を変更するたびに、booleanそれに応じてそれぞれを設定し、メソッドを呼び出しますinvalidateOptionsMenu()

于 2013-02-04T21:14:46.877 に答える