2017-08-14 11 views
0

私は自分のアプリにボトムナビゲーションバーを実装していますが、ダッシュボードアイコン上のどのアクティビティがハイライトされていても問題はありません。どのような活動が強調されているのですか?ここでAndroidボトムナビゲーション

public class Dashboard extends AppCompatActivity 
    implements View.OnClickListener 
{ 

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener 
     = new BottomNavigationView.OnNavigationItemSelectedListener() 
{ 
    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) 
    { 
     switch (item.getItemId()) 
     { 
      case R.id.navigation_request: 
       Intent r = new Intent(Dashboard.this, Request.class); 
       startActivity(r); 
       finish(); 
       break; 
      case R.id.navigation_settings: 
       Intent s = new Intent(Dashboard.this, AppSettings.class); 
       startActivity(s); 
       finish(); 
       break; 
     } 
     return false; 
    } 
}; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dashboard); 

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); 
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); 
} 

は私のXMLメニューファイルが

ある
<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
    android:id="@+id/navigation_home" 
    android:icon="@drawable/ic_home_black_24dp" 
    android:title="@string/title_home" /> 

<item 
    android:id="@+id/navigation_request" 
    android:icon="@drawable/ic_request_icon" 
    android:title="@string/title_request" /> 

<item 
    android:id="@+id/navigation_settings" 
    android:icon="@drawable/ic_icon_settings" 
    android:title="@string/title_settings" /> 

</menu> 

ここと同じように選択したとして、あなたがアイテムをマークしてみましょうどの方法setSelectedItemId(int id)を使用し、私は私のactivity_dashboardに

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<FrameLayout 
    android:id="@+id/content" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1"> 

<!-- ONLY TEXTVIEWS ARE HERE --> 

</FrameLayout> 



<android.support.design.widget.BottomNavigationView 
    android:id="@+id/navigation" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom" 
    android:background="?android:attr/windowBackground" 
    app:menu="@menu/navigation" /> 

</LinearLayout> 
+0

開いている他のアクティビティ(リクエストとAppSettings)の下部ナビゲーションビューは表示されていますか?それとも、あなたがダッシュボードに戻るときに、同じアイテムが常にチェックされているということですか? –

+0

3つのアクティビティにはすべて同じコードがあり、ダッシュボードにアクセスする場合は常に強調表示されます。 – Jayce

答えて

0

はお勧めしません。代わりに、BottomNavigationViewをホストする単一のActivityと、ユーザーがBottomNavigationViewと対話するときに.replace()という複数のFragmentインスタンスがコンテンツ領域にホストされます。

あなたの問題を解決できるかどうかを見てみましょう。

このパズルには2つの部分があります。最初は簡単です:BottomNavigationViewのどの項目を選択するかを指定する必要があります。これはsetSelectedItemId()を呼び出すことで実現できます。このようなものをonCreate()メソッドに追加してください。

navigation.setSelectedItemId(R.id.navigation_settings); 

もう1つはもう少し複雑です。 setSelectedItemId()に電話すると、システムはユーザーがそのアイテムをタップしたかのように動作します。つまり、OnNavigationItemSelectedListenerが表示されます。

投稿されたリスナーを見て、私はあなたが常にreturn falseであることに気付きました。アイテムはそう

への呼び出しを選択すべきではない場合 true選択した項目とfalseとしてアイテムを表示するには:あなたがonNavigationItemSelected()のドキュメントをチェックする場合は、

返しがわかりますsetSelectedItemId()はリスナーをtrueに返すように変更しないと動作しません。

あなたはその呼び出しあなたsetOnNavigationItemSelectedListener()呼び出しの前に置いた場合あなたはまだちょうどsetSelectedItemId()コールの問題を解決することができ、それは単に問題をマスキングしています。タップされた項目を選択して表示する場合は、リスナーを修復してtrueを返す方がよいでしょう。

+0

私はそれを試み、同じ結果を得ました。ダッシュボードのアクティビティが強調表示されているだけです。 – Jayce

+0

他にも問題があります。私は2つの項目を持つメニューを持つBottonNavigationViewだけを持つアプリケーションを作成しました。私のMainActivityで行っていることが 'setContentView()'を呼び出すと、最初の項目が強調表示されますが、 'findViewById()'と 'setSelectedItemId()'を追加すると、2番目の項目が強調表示されます。 –

+0

さて、この行をコメントアウトすると、navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);が表示されますが、それはあなたが提案したことをしますが、オンクリックは機能しません。 – Jayce

0

をナビゲーションを使用する方法でありますそれがタップされた場合。このよう

:すべてはBottomNavigationViewと(OnNavigationItemSelectedListenerなどのように)それに関連するコードを複製し、多くの異なるActivityのインスタンスを使用して

BottomNavigationView bottomNavigationView; 
bottomNavigationView = (BottomNavigationView) 
findViewById(R.id.bottomNavigationView); 
bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id); 
関連する問題