これを行うための正しい方法は、あなたの活動にonPrepareOptionsMenu
メソッドをオーバーライドすることです。
は、ユーザーができる「お気に入り」または「未お気に入り」アイテムのアプリを持っていると言います。まず、2つのメニュー項目を持つmenu.xml
を作成し、visibleプロパティをtrueに設定します。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.myapp.SoloActivity">
<item android:id="@+id/add_favorite"
android:title="Favorite"
android:icon="@drawable/ic_favorite_border_black_24dp"
android:visible="true"
app:showAsAction="always" />
<item android:id="@+id/remove_favorite"
android:title="Favorite"
android:icon="@drawable/ic_favorite_black_24dp"
android:visible="false"
app:showAsAction="always" />
</menu>
次に、あなたの活動に、onPrepareOptionsMenu
メソッドをオーバーライドして、表示するメニュー項目を決定します。あなたはこれらのそれぞれについて、「クリック」イベントを処理することができ、あなたの活動のonOptionsItemSelected
方法で今
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (IsFavorite) {
menu.findItem(R.id.add_favorite).setVisible(false);
menu.findItem(R.id.remove_favorite).setVisible(true)
} else {
menu.findItem(R.id.add_favorite).setVisible(true);
menu.findItem(R.id.remove_favorite).setVisible(false)
}
}
、。次に、アイコンの可視性を切り替えるには、
invalidateOptionsMenu();
に電話してください。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.add_favorite:
IsFavorite = !IsFavorite;
Toast.makeText(this, "Added to Favorites", Toast.LENGTH_SHORT).show();
invalidateOptionsMenu();
break;
case R.id.remove_favorite:
IsFavorite = !IsFavorite;
Toast.makeText(this, "Removed from Favorites", Toast.LENGTH_SHORT).show();
invalidateOptionsMenu();
break;
}
return super.onOptionsItemSelected(item);
}
invalidateOptionsMenu();
を呼び出すと、onPrepareOptionsMenu
が再び呼び出されることになりますどの、メニューが再描画されるようになります。
これは、実行時にメニュー項目に変更を加える場合に推奨される方法です。
マニュアルは、ここで見つけることができます:https://developer.android.com/guide/topics/ui/menus.html
私はこれが役に立てば幸い!
@ user3302938あなたの質問に十分に答えたら、回答としてマークしてください(私は評判を使うことができます)。あなたの質問に答えることができないと感じる場合は、問題に深く掘り下げてコメントするようにしてください。ありがとう。 – dshrout