strings.xml
ファイルでtrue/falseに設定されている文字列によっては、Androidアプリケーションでメニューのオプションを表示/非表示したい場合があります。Androidのメニューオプションのパラメータ設定方法
例として、私はstrings.xml
ファイルにこれらの文字列を持っています。したがって、この場合にのみoption2
とoption3
が示されなければなら
<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);
}
私は両方のメニューのオプションをパラメータすることができます方法:最初のレイアウトを膨らませる文字列は私のMainActivity
のonCreate
機能に次のように私はレイアウトを表示する「ハロー」であることを考慮すると、例えば
、最初のものが表示されていて、1つのオプションを非表示にしたい場合は、そのメニューのオプションを参照できますか?
ありがとうございます!
@ user3728999によると、標準のSharedPreferencesソリューションを使用する方がよいでしょう。それに応じて、メニュー項目の可視性を設定します。 –