2016-09-29 5 views
0

私はMainActivity.javaにはDrawerLayout/Navigationが含まれています。私はAbout.javaアクティビティを起動するにはMainActivityに次のコードを使用:Androidでアクティビティが終了したときにDrawerLayoutナビゲーション項目のアイコンとテキストの色をリセットするにはどうすればよいですか?

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(); 
} 
} 

について活動は罰金およびアクティブDrawerLayout /ナビゲーションハイライト/内のアイテムのアイコン/テキストの色に起動し、それが強調表示/アクティブのままについてについて戻るボタンを押すとアクティビティが終了します。

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 Navigation

+1

あなたは 'NavigationView'のメニューに' checkableBehavior'属性を持っていますか? –

+0

@MikeM。ちょうど追加されましたが、役に立たなかった。 'android:checkable =" true "' –

+0

ナー、あなたはそれを望んでいないでしょう。おそらくそれが問題だったかどうかを見ていただけです。 –

答えて

0

ありがとうございます@問題の解決策を提供するための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 Menu Documentation

関連する問題