Android底部导航
我一直在实施一个底部导航栏到我的应用程序,问题是无论我在仪表板图标上的哪个活动都是突出显示的一个。我如何得到它,因此无论我在哪个活动都是突出显示的活动?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>
使用许多不同的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
。
我试过了,得到了同样的结果。仍然只显示突出显示的仪表板活动。 – Jayce
然后还有一些其他问题。我创建了一个只有BottonNavigationView的应用程序,其菜单包含两个项目。如果我在MainActivity中所做的全部操作都是调用'setContentView()',那么第一项将突出显示,但如果我添加了一个'findViewById()'和'setSelectedItemId()',则第二项将突出显示。 –
那么我发现,如果我注释掉这行'navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);'然后它做你的建议,但然后点击不起作用。 – Jayce
只要使用方法setSelectedItemId(int id)
这让我们的选择为您标记项目如果它被挖掘。
像这样:
BottomNavigationView bottomNavigationView;
bottomNavigationView = (BottomNavigationView)
findViewById(R.id.bottomNavigationView);
bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id);
底部导航视图是否可以在您打开的其他活动(请求和AppSettings)上看到?或者你的意思是_当你回到Dashboard_时,总是检查相同的项目? –
所有三项活动都具有相同的确切代码,无论我转到仪表板的哪一项都始终高亮显示。 – Jayce