2017-08-14 121 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);