为什么片段会多次添加到后台堆栈

时间:2019-09-11 06:53:14

标签: android fragment bottomnavigationview

我试图用活动内部的片段实现底部导航。 我已经做到了,并且成功了。

要替换单击每个导航项的片段,我使用以下代码。

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

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_notifications:
                loadFragment(new NotificationsFragment());
                return true;
            case R.id.navigation_notes:
                loadFragment(new NotesFragment());
                return true;
            case R.id.navigation_about:
                loadFragment(new AboutFragment());
                return true;
        }
        return false;
    }
};

private void loadFragment(Fragment fragment) {
    // load fragment
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.frame_container, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

现在的问题是,当我多次单击底部导航栏中的导航时,该片段也会多次添加到后堆栈中。 因此,当我单击“后退”按钮时,片段将再次加载,而不是退出或加载先前的片段。

那么,如何防止片段多次添加到后堆栈?

1 个答案:

答案 0 :(得分:0)

删除

  

transaction.addToBackStack(null);

添加

  

transaction.disallowAddToBackStack();