スタックオーバーフローに関する質問を調べましたが、解決策が見つかりません。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.themenu, menu);
MenuItem item = menu.findItem(R.id.menu_settings);
MenuItem item2 = menu.findItem(R.id.menu_save);
item.setVisible(isdown);
item2.setVisible(isdown);
return true;
}
これにより、メニュー項目が表示されるように設定されます(item1およびitem2)。 onclickは正常に機能します
public void inflateTextarea() {
if(isdown == true) {
isdown = false;
LinearLayout tl = (LinearLayout)findViewById(R.id.content);
tl.setVisibility(View.VISIBLE);
ScaleAnimation scale = new ScaleAnimation(1, 1, 0, 1);
scale.setFillAfter(true);
scale.setDuration(500);
tl.startAnimation(scale);
}
}
次に、これによりisdownブール値がfalseに設定されます。スタック上の人々は、onPrepareOptionsMenuはクリックするたびに起動するはずだと言いますが、そうではありません。 onclick関数で1つのメニュー項目を非表示にできます
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_settings:
Log.v("Log:","edit_item pressed");
return true;
}
}
しかし、非表示にする必要のあるメニュー項目と表示したい項目が複数あります。どうすればこれについて行くことができますか?
isDown
変数を変更するだけでは不十分です。可視性を変更するたびに、setVisible()
メソッドを呼び出す必要があります。このメソッドは、ブール値を設定するだけではないため、ブール値を変更するだけでは不十分です。
isDown
の値をfalseに変更した後、invalidateOptionsMenu()
を呼び出す必要があります。これにより、onPrepareOptionsMenu()
を再度呼び出すことでメニューが再起動します。
メニュー項目を非表示にするには、次のコードを試してください。
...
isdown = false;
invalidateOptionsMenu();
...
これを試して、
_private Menu menu=null;
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater)
{
inflater.inflate(R.menu.note_menu, menu);
this.menu=menu;
super.onCreateOptionsMenu(menu,inflater);
menu.findItem(R.id.menuChartNoteEdit).setVisible(isdown);
menu.findItem(R.id.menuChartOpenNote).setVisible(isdown);
}
_
どこでもメニューを非表示にしたい場合は、onCreateOptionsMenu()
を実行した後、isdown
の値を変更して、このコードを繰り返します。
_menu.findItem(R.id.menu_settings).setVisible(isdown);
menu.findItem(R.id.menu_save).setVisible(isdown);
_
2つのアイテムがあるメニューがあります。1つ目はアイテムの保存、2つ目はアイテムの編集です。編集に来たときに欲しかったのですが、最初は「アイテムを保存」が非表示になっていて、「アイテムを編集」をクリックすると「アイテムを保存」が表示されていました。
そう:
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
で値を設定しますisHidden()
に設定しますisVisible()
に設定します公共地域:
MenuItem saveItem;
onCreateOptionsMenu:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_detail_products, menu);
saveItem = (MenuItem) menu.findItem(R.id.action_detail_product_save);
saveItem.setVisible(isHidden());
}
私が欲しいところ:
saveItem.setVisible(isVisible());
最後に、それは私が望むように機能します。
FragmentActivityでこれを試してください
public boolean onPreparePanel(int featureId, View view, Menu menu) {
if(isLeftMenuOpened()) return false;
return super.onPreparePanel(featureId, view, menu);
}
メソッドFragmentActivity.onPreparePanelは、添付されているすべてのフラグメントのメニューを作成します。メニューを表示するには、trueを返す必要があります。 falseを返すと、表示されません。