2017-08-14 164 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> 

這是我如何使用導航在我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)上看到?或者你的意思是_當你回到Dashboard_時,總是檢查相同的項目? –

+0

所有三項活動都具有相同的確切代碼,無論我轉到儀表板的哪一項都始終高亮顯示。 – Jayce

回答

0

使用許多不同的Activity情況下,所有複製BottomNavigationView及其相關代碼(如OnNavigationItemSelectedListener等),不推薦使用。相反,當用戶與BottomNavigationView進行交互時,您通常會使用一個Activity來承載BottomNavigationView以及多個Fragment實例.replace()d到您的內容區域。

這就是說,讓我們看看我們是否可以解決您的問題。

這個謎題有兩個部分。首先很簡單:你必須指出你的BottomNavigationView應該選擇哪個項目。這可以通過調用setSelectedItemId()來實現。把這樣的東西添加到你的onCreate()方法中。

navigation.setSelectedItemId(R.id.navigation_settings); 

第二個稍微複雜一些。當您致電setSelectedItemId()時,系統將按照用戶點擊該項目的行爲行事。換句話說,您的OnNavigationItemSelectedListener將被觸發。

看着你發佈的聽衆,我注意到你總是return false。如果您檢查文檔onNavigationItemSelected(),你會發現

返回true顯示項目作爲選擇項目,false如果該項目不應該選擇

所以調用setSelectedItemId()將不會工作,也不會改變您的聽衆返回true

你仍然可以解決這個問題,只需setSelectedItemId()電話,如果你把該呼叫以前setOnNavigationItemSelectedListener()電話,但是這只是掩蓋了問題。如果您希望點擊的項目顯示爲選定狀態,則最好修復您的聽衆以返回true

+0

我試過了,得到了同樣的結果。仍然只顯示突出顯示的儀表板活動。 – Jayce

+0

然後還有一些其他問題。我創建了一個只有BottonNavigationView的應用程序,其菜單包含兩個項目。如果我在MainActivity中所做的全部操作都是調用'setContentView()',那麼第一項將突出顯示,但如果我添加了一個'findViewById()'和'setSelectedItemId()',則第二項將突出顯示。 –

+0

那麼我發現,如果我註釋掉這行'navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);'然後它做你的建議,但然後點擊不起作用。 – Jayce

0

只要使用方法setSelectedItemId(int id)這讓我們的選擇爲您標記項目如果它被挖掘。

像這樣:

BottomNavigationView bottomNavigationView; 
bottomNavigationView = (BottomNavigationView) 
findViewById(R.id.bottomNavigationView); 
bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id);