首页 > 解决方案 > 如果我返回,如何启用底部导航状态?

问题描述

当我按下返回键时,底部导航的颜色不会改变,但我的片段会改变。我想同时改变两者。即当我回去时,片段应该随着底部导航图标而改变。

这是我当前的代码:

MainActivity.java

public class MainActivity extends AppCompatActivity {

private FrameLayout mMainFrame;

Fragment homeFragment = new HomeFragment();
Fragment trendingFragment = new TrendingFragment();
Fragment latestFragment = new LatestFragment();
Fragment inboxFragment= new InboxFragment();
Fragment libraryFragment = new LibraryFragment();


// Adding acion on botom navigation icon basically adding Fragment Action
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.bottom_navigation_home:
                setFragment(homeFragment);
                return true;
            case R.id.bottom_navigation_trending:
                setFragment(trendingFragment);
                return true;
            case R.id.bottom_navigation_latest:
                setFragment(latestFragment);
                return true;
            case R.id.bottom_navigation_inbox:
                setFragment(inboxFragment);
                return true;
            case R.id.bottom_navigation_library:
                setFragment(libraryFragment);
                return true;
            default:
                return false;

        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Decleration Connecting Java To xml
    mMainFrame = (FrameLayout) findViewById(R.id.main_container);

    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.bottom_navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    setFragment(homeFragment); // Start Home Fregment first

}

@Override
public void onBackPressed(){
    if (getSupportFragmentManager().getBackStackEntryCount() == 1){
        finish();
    }
    else {
        super.onBackPressed();
    }
}

//Declear Method
private void setFragment(Fragment fragment) {
    // Set fragment in frame layout
    String backStateName =  fragment.getClass().getName();
    String fragmentTag = backStateName;

    FragmentManager manager = getSupportFragmentManager();
    boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);

    if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null){ //fragment not in back stack, create it.
        FragmentTransaction ft = manager.beginTransaction();
        ft.replace(R.id.main_container, fragment, fragmentTag);
        ft.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);
        ft.addToBackStack(backStateName);
        ft.commit();

    }
}

}

bottom_nav_color_selector.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorPrimary" android:state_checked="true"/>
<item android:color="@color/colorIcon" android:state_checked="false"/>
</selector>

MainActivity.xml中的 BottomNavigationView

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="0dp"
    android:layout_height="48dp"
    android:layout_marginStart="0dp"
    android:layout_marginEnd="0dp"
    android:background="@color/colorWhite"
    android:clickable="true"
    android:focusable="true"
    app:itemIconSize="25dp"
    app:itemIconTint="@color/bottom_nav_color_selector"
    app:itemTextAppearanceActive="@style/BottomNavigationView.Active"
    app:itemTextAppearanceInactive="@style/BottomNavigationView"
    app:itemTextColor="@color/bottom_nav_color_selector"
    app:labelVisibilityMode="labeled"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/bottom_navigation" />

标签: javaandroidandroid-layout

解决方案


嗨,试试这个 set itemIconTint 和 itemTextColor 你特定颜色的颜色选择器 xml

<android.support.design.widget.BottomNavigationView
            android:id="@+id/bottom_navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@color/Black"
            app:itemBackground="@color/White"
            app:itemIconTint="@color/nav_selector"
            app:itemTextColor="@color/nav_selector"
            app:menu="@menu/nav_menu" />

这是 nav_selector.xml 将此文件放在 res->color 文件夹中

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/OrangeBrown" android:state_checked="true" />
    <item android:color="@color/OrangeBrown" android:state_enabled="true" android:state_pressed="true" />
    <item android:color="@color/BlackishGray" />
</selector>

如果你想点击特定的标签,你可以用下面的代码做到这一点

View view = bottomNavigationView.findViewById(R.id.nav_home);
        view.performClick();

推荐阅读