簡體   English   中英

在Android中完成活動后,如何重置DrawerLayout導航項圖標和文本顏色?

[英]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>

問題的圖形表示: DrawerLayout Android導航

感謝@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()設置檢查狀態。

Android菜單文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM