Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在BottomNavigationView中设置所选项目_Android_Bottomnavigationview - Fatal编程技术网

Android 如何在BottomNavigationView中设置所选项目

Android 如何在BottomNavigationView中设置所选项目,android,bottomnavigationview,Android,Bottomnavigationview,我试图在创建的活动上设置默认项,但它不起作用? 这是我的代码: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_userhome); mTextMessage = (TextView) findViewById(R.id.message); profile = (Fram

我试图在创建的活动上设置默认项,但它不起作用? 这是我的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_userhome);
    mTextMessage = (TextView) findViewById(R.id.message);
    profile = (FrameLayout) findViewById(R.id.profile);
    mall = (FrameLayout) findViewById(R.id.mall);
    dietplan =(FrameLayout) findViewById(R.id.dietplan);
    BottomNavigationView navigation = (BottomNavigationView) 
    findViewById(R.id.navigation);
    navigation.setSelectedItemId(R.id.dietplan);
     navigation.setOnNavigationItemSelectedListener 
    (mOnNavigationItemSelectedListener);
}
但似乎
navigation.setSelectedItemId(R.id.dietplan)不工作。请帮助我设置底部导航栏的默认项:

这是我的堆栈跟踪(logcat):


您需要
setChecked(true)
。试试这个代码

mBottomNavigationView=(BottomNavigationView)findViewById(R.id.bottom_nav);
mBottomNavigationView.getMenu().findItem(R.id.item_id).setChecked(true);

选中的项目在
底部导航视图中突出显示

只需共享我的工作源代码即可

在Xml中

 <?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"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.design.widget.BottomNavigationView
        android:background="@color/colorWhite"
        android:id="@+id/gfPrlBnvBtmView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_alignParentBottom="true"
        app:menu="@menu/bottom_navigation_main" />
</LinearLayout>

在爪哇

  public class TestActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener
{
    private BottomNavigationView mBtmView;
    private int mMenuId;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        setContentView(R.layout.test);
        mBtmView = (BottomNavigationView) findViewById(R.id.gfPrlBnvBtmView);
        mBtmView.setOnNavigationItemSelectedListener(this);
        mBtmView.getMenu().findItem(R.id.action_yoga).setChecked(true);
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        // uncheck the other items.
        mMenuId = item.getItemId();
        for (int i = 0; i < mBtmView.getMenu().size(); i++) {
            MenuItem menuItem = mBtmView.getMenu().getItem(i);
            boolean isChecked = menuItem.getItemId() == item.getItemId();
            menuItem.setChecked(isChecked);
        }

        switch (item.getItemId()) {
            case R.id.action_food: {
            }
            break;
            case R.id.action_medical: {
            }
            break;
            case R.id.action_yoga: {
            }
            break;
            case R.id.action_postures: {
            }
            break;
        }
        return true;
    }
}
公共类测试活动扩展了AppCompative活动实现了BottomNavigationView.OnNavigationItemSelectedListener
{
私有底部导航视图mBtmView;
私有内码;
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState,@Nullable persistable Bundle persistentState){
super.onCreate(savedInstanceState、persistentState);
setContentView(R.layout.test);
mBtmView=(底部导航视图)findViewById(R.id.gfPrlBnvBtmView);
mBtmView.setOnNavigationItemSelectedListener(此);
mBtmView.getMenu().findItem(R.id.action_yoga).setChecked(true);
}
@凌驾
公共布尔值onNavigationItemSelected(@NonNull MenuItem item){
//取消选中其他项目。
mMenuId=item.getItemId();
对于(int i=0;i
这对我很有用

活动布局:

<android.support.design.widget.BottomNavigationView
        android:id="@+id/bottomNavigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:itemBackground="@color/colorPrimary"
        app:itemIconTint="@color/tabs"
        app:itemTextColor="@color/tabs"
        app:menu="@menu/bottom_navigation_main" />
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="@color/not_active" android:state_checked="false"/>
    <item android:color="@color/active" android:state_checked="true"/>

</selector>
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_tab0:
            setFragment(f0);
            break;
        case R.id.action_tab1:
            setFragment(f1);
            break;
    }
    return true; // not false!
}

Kotlin扩展版的答案:


这不会触发OnNavigationItemSelectedListener的

您还可以使用如下索引在BottomNavigationView中设置选择:

public void selectBottomNavigationOption(int index) {
        switch (index) {
            case 0:
                index = R.id.action_1;
                break;
            case 1:
                index = R.id.action_2;
                break;
            case 2:
                index = R.id.action_3;
                break;
            case 3:
                index = R.id.action_4;
                break;
        }
        bottomNavigationView.setSelectedItemId(index);
    }

将android:enabled=“true”
添加到底部导航菜单项

<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item
    android:id="@+id/menu_id"
    android:enabled="true"
    android:icon="@drawable/ic_my_icon"
    android:title="@string/menu_title"/>
</menu>

onCreate()
方法中, 通过设置侦听器
bottomNavigationView.setOnNavigationItemSelectedListener(MLListener)

并通过执行
bottomNavigationView.selectedItemId=R.id.menu\u id
设置要选择的项目


每当创建活动时,这将从
NavigationItemSelectedListener
触发
onNavigationItemSelected()

如果希望在视图中忽略已单击的元素,而不是将其返回为“selected”,则在处理单击后可以返回false,在某些情况下和某些设计中,您可能需要打开一个活动而不是片段,这将在活动关闭后使选定项成为底部项目

private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
    when (item.itemId) {
        R.id.navigation_shipment -> {
            currentItem = TAB_INDEX_SHIPMENT
            val intent = Intent(this, BookShipmentActivity::class.java)
            startActivity(intent)
            return@OnNavigationItemSelectedListener false
        }
    }
    false
}
您可以使用:

    navigationView?.menu?.findItem(drawableMenuItem.id)?.isChecked = true

并且它不会在NavigationItemSelectedListener上触发
事件。

仅供参考:对于片段,onCreateView

BottomNavigationView mBottomNavigationView = getActivity().findViewById(R.id.bottomNavigationView);

mBottomNavigationView.setSelectedItemId(R.id.your_item);
有两个塞纳里奥

设置所选菜单项ID。其行为与点击某个项目相同

代码示例:

BottomNavigationView bottomNavigationView;
bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView);
bottomNavigationView.setOnNavigationItemSelectedListener(myNavigationItemListener);
bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id);
  BottomNavigationView bottomNavigationView= (getActivity()).findViewById(R.id.bottom_navigation);
    bottomNavigationView.getMenu().findItem(R.id.action_manage_orders_id).setChecked(true);
我想你只需要检查一下就可以了

代码示例:

BottomNavigationView bottomNavigationView;
bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView);
bottomNavigationView.setOnNavigationItemSelectedListener(myNavigationItemListener);
bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id);
  BottomNavigationView bottomNavigationView= (getActivity()).findViewById(R.id.bottom_navigation);
    bottomNavigationView.getMenu().findItem(R.id.action_manage_orders_id).setChecked(true);
科特林溶液 断断续续

getActivity()?.myNavigationViewId?.selectedItemId = R.id.other_tab_id
在活动中

myNavigationViewId?.selectedItemId = R.id.other_tab_id
注意:确保用实际的导航视图和选项卡id替换
myNavigationViewId
其他选项卡id


含碎片的Kotlin溶液

var fragment = Fragment()
bottomNav = findViewById(R.id.bottom_nav)
bottomNav.setOnNavigationItemSelectedListener { item ->
  when (item.itemId) {
    R.id.home -> {
      fragment = HomeForm()
    }
    R.id.score -> {
      fragment = ScoreForm()
    }
  }
  supportFragmentManager
    .beginTransaction()
    .replace(R.id.frame_layout, fragment)
    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
    .commit()
  true
}
bottomNav.selectedItemId = R.id.score // init open score tab

对我来说,
setSelectedItemId(intid)
仅显示片段,但所选菜单项仍然是错误的

我发现在
BottomNavigationView
都设置好之后调用
setSelectedItemId(intid)
是不够的


我停止在
onCreate(savedInstanceState:Bundle?
中调用
setSelectedItemId(int-id)
,而是开始在
onResume()中调用它。这解决了问题。

我在navigation.getMenu().findItem(R.id.dietplan)。setChecked(true)之前尝试过这个方法;但它会给出NullPointerException,首先初始化底部导航,然后查找菜单。。它的工作代码。。。我尝试了此方法如何更改选中项的颜色?@AlanNelson检查此说明此方法仅突出显示该项,但不单击它。如果有人投票反对,请解释为什么只有我更改答案,谢谢您为什么选中所有菜单?您可以这样做
item.setChecked(true)getActivity()
来执行
findViewById(R.id.bottom\u nav)
,因为我是从一个片段执行的。非常感谢。