[英]How to reset DrawerLayout navigation item icon and text colour when activity finished in Android?
我有MainActivity.java
,其中包含DrawerLayout / Navigation。 我在MainActivity中使用以下代碼來啟動About.java
活動:
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
Intent intent = new Intent(Intent.ACTION_VIEW);
if (id == R.id.nav_fav) {
} else if (id == R.id.nav_themes) {
} else if (id == R.id.nav_about) {
intent = new Intent(getApplicationContext(), About.class);
startActivity(intent);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
About活動啟動正常,並且DrawerLayout / Navigation中的項目的圖標/文本顏色突出顯示/處於活動狀態,但是即使About活動通過按后退按鈕完成,它也保持突出顯示/活動狀態。
About.java
代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
final ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
break;
default:
}
return true;
}
MainActivity.xml
:
<android.support.v4.widget.DrawerLayout 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"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
activity_main_drawer.xml
:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_fav"
android:icon="@drawable/ic_menu_favorite"
android:title="@string/favorite" />
<item
android:id="@+id/nav_themes"
android:icon="@drawable/ic_menu_theme"
android:title="@string/themes" />
<item
android:id="@+id/nav_about"
android:icon="@drawable/ic_menu_about"
android:title="@string/about_us" />
</group>
<item android:title="Communicate">
<menu>
<item
android:id="@+id/nav_share"
android:icon="@drawable/ic_menu_share"
android:title="@string/share" />
<item
android:id="@+id/nav_rate"
android:icon="@drawable/ic_menu_rate"
android:title="@string/rate_us" />
<item
android:id="@+id/nav_more"
android:icon="@drawable/ic_menu_more"
android:title="@string/more_apps" />
</menu>
</item>
</menu>
感謝@MikeM為該問題提供解決方案。
我在導致問題的菜單項的布局中有<group android:checkableBehavior="single">
。 我刪除了代碼,這解決了問題。
<group>
<item
android:id="@+id/nav_fav"
android:icon="@drawable/ic_menu_favorite"
android:title="@string/favorite" />
<item
android:id="@+id/nav_themes"
android:icon="@drawable/ic_menu_theme"
android:title="@string/themes" />
<item
android:id="@+id/nav_about"
android:icon="@drawable/ic_menu_about"
android:title="@string/about_us" />
</group>
根據android的代碼執行以下操作:
選擇一個可檢查的項目時,系統將調用您選擇的項目各自的回調方法(例如onOptionsItemSelected())。 您必須在此處設置復選框的狀態,因為復選框或單選按鈕不會自動更改其狀態。 您可以使用isChecked()查詢項目的當前狀態(與用戶選擇之前一樣),然后使用setChecked()設置檢查狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.