2017-05-09 19 views
8

strings.xmlファイルでtrue/falseに設定されている文字列によっては、Androidアプリケーションでメニューのオプションを表示/非表示したい場合があります。Androidのメニューオプションのパラメータ設定方法

例として、私はstrings.xmlファイルにこれらの文字列を持っています。したがって、この場合にのみoption2option3が示されなければなら

<string name="option1">false</string> 
<string name="option2">true</string> 
<string name="option3">true</string> 

。他の側では

は、私が意味する、コードで、私は次のことを試してみました:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

    getMenuInflater().inflate(R.menu.main, menu); 

    if((getResources().getString(R.string.option1)).equals("false")){ 
     menu.getItem(R.id.option1).setVisible(false); 
    } 

    return true; 
} 

しかしoption1はまだメニューに表示されています。

これらのオプションをパラメータ化するにはどうすればよいですか?私はこれらのオプションを削除することができますが、将来、クライアントがこれらのオプションを再度有効にしたい場合は、虚偽値を真に変更することができます。

編集:私は、メニューの名前が間違っていたので、私はNullPointerExceptionを得ていた通知を持って

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/option1" 
      android:title="Option 1" /> 
     <item 
      android:id="@+id/option2" 
      android:title="Option 2" /> 
     <item 
      android:id="@+id/option3" 
      android:title="Option 3" /> 
     .... 
    </group> 
</menu> 

LAST UPDATE

はここに私のメニューです。私はそれを修正し、今はそれが私に何のエラーも与えません。

しかし、私は2つの異なるレイアウト(それぞれのレイアウトに1つずつ)を含んでいて、ログイン時に表示される1つの文字列に応じて各レイアウトを膨張させるので問題が発生します。

if("hello".equals(stringForLayout)){ 
    setContentView(R.layout.activity_main); 
}else{ 
    setContentView(R.layout.activity_main_secondary); 
} 

私は両方のメニューのオプションをパラメータすることができます方法:最初のレイアウトを膨らませる文字列は私のMainActivityonCreate機能に次のように私はレイアウトを表示する「ハロー」であることを考慮すると、例えば

、最初のものが表示されていて、1つのオプションを非表示にしたい場合は、そのメニューのオプションを参照できますか?

ありがとうございます!

+1

@ user3728999によると、標準のSharedPreferencesソリューションを使用する方がよいでしょう。それに応じて、メニュー項目の可視性を設定します。 –

答えて

3

最後に、私の問題がどこにあるのかを見つけました。

onCreateOptionsMenuonPrepareOptionsMenuが使用されていないため、削除したために問題が発生しました。さらに

、私は後に私のMainActivityクラス、次の文の私のonCreate機能にNavigationViewを膨らませる、私が使用していたNavigationView内の私のメニューを使用していたとおり、私は持っていなかった、そこ

navigationView.getMenu().findItem(R.id.option1).setVisible(false); 

私のメニュー項目を正常に隠す問題があります。

4

あなたは文字列を(例えばS1 & S2)を使用している場合、あなたはこのようにそれらを比較する必要があります。

を(s1.equals(S2))場合は{...}

ところであなたはできます。:また、アンドロイドのドキュメントでShared Preferencesを見れば、より洗練されたソリューションが得られます。ここでは、さまざまなメニューオプションのブール値変数を定義できます。

+0

OMG!私はそのミスを信じることができません。 JavaScriptでプログラミングをしなくても、初心者の間違いに戻ってしまいました。(しかし、もう一度疑問があります。私はfalseを表示するようにしています。 'java.lang.NullPointerException:インタフェースメソッドを呼び出そうとしました ' android.view.MenuItem android.view'私は 'getItem'と' findItem'の両方を試しましたが、両方とも同じエラーが発生しました。別の場所で比較を行うべきですか? –

+0

xmlをメニュー? – user3728999

+0

メニューのxmlを追加しました。 –

0

特定のアクティビティの特定のメニュー項目を非表示にしたい場合にこれを試してください。

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuItem mSearch = menu.findItem(R.id.mSearch); 
     mSearch.setVisible(false); 
     invalidateOptionsMenu(); 
} 
関連する問題