BottomNavigation项目选定的动画onBackPressed

时间:2017-08-03 01:48:06

标签: java android android-fragments

我有一个带有BottomNavigation的应用程序(3项)。项目1加载片段1,项目2加载片段2和项目3加载片段3.当在BottomNavigation中选择一个项目时,此项目的视图保持蓝色,文本更大。我已经实现了onBackPressed,因为它支持片段历史(BackStack)。但是,当我支持时,BottomNavigation中的观点是停止的。所以,如果我在片段3中,然后我按回按钮并将其返回到片段2,则BottomNavigationView显示我在片段3中,如果我再次按下后退按钮,我会转到fragment1,但是BottomNavigationView don不要更新,它会保留在片段3中。屏幕短片将显示我正在谈论的内容。 对不起我的英文不好和我的不好解释。

enter image description here

enter image description here

MainActivity.java

public class MainActivity extends AppCompatActivity {

private TextView mTextMessage;

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment selectedFragment = null;
        switch (item.getItemId()) {
            case R.id.navigation_home:
                selectedFragment = Fragment1.newInstance();
                getSupportFragmentManager().beginTransaction().replace(R.id.content, selectedFragment).addToBackStack(null).commit();
                return true;
            case R.id.navigation_dashboard:
                selectedFragment = Frament2.newInstance();
                getSupportFragmentManager().beginTransaction().replace(R.id.content, selectedFragment).addToBackStack(null).commit();
                return true;
            case R.id.navigation_notifications:
                selectedFragment = Fragment3.newInstance();
                getSupportFragmentManager().beginTransaction().replace(R.id.content, selectedFragment).addToBackStack(null).commit();
                return true;
        }
        return false;
    }

};

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

    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}

1 个答案:

答案 0 :(得分:1)

来自Material Design guidelines for bottom navigation

  

在Android上,“后退”按钮不会在底部导航栏视图之间导航。

来自Developer Training for Back Navigation

  

注意:当事务用于水平导航时(例如切换选项卡时),不应将事务添加到后台堆栈。

因此,在根据用户与BottomNavigationView的互动替换片段时,不应使用后台堆栈。

如果您选择忽略这些指南,可能答案是查看FragmentManager.OnBackStackChangedListener并在弹出后台堆栈时激活相应的导航项。