如何保存上次检查的菜单?

时间:2018-12-16 13:18:03

标签: android menu bottomnavigationview

所以我的申请从这里开始:https://i.stack.imgur.com/Y4e0d.jpg

说我想去旅行,单击它,然后得到以下提示:https://i.stack.imgur.com/tOWLW.jpg

然后用户要转到消息:https://i.stack.imgur.com/PfY9W.jpg

然后,如果用户返回我的旅程,但无法正常工作。https://i.stack.imgur.com/SBZhH.jpg

这是我正在使用的代码:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View view = inflater.inflate(R.layout.fragment_trips, container, false);

    navigationBar  = view.findViewById(R.id.TopMenu);
    mainFrameLayout = view.findViewById(R.id.resultFrame);

    posts = new Posts();
    map = new Maps();
    myTrips = new myTrips();

    getChildFragmentManager().beginTransaction().replace(R.id.resultFrame, posts).commit();

    navigationBar.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            switch (menuItem.getItemId())
            {
                case R.id.nav_Posts:
                    getChildFragmentManager().beginTransaction().replace(R.id.resultFrame, posts).commit();
                    return true;
                case R.id.nav_Maps:
                    getChildFragmentManager().beginTransaction().replace(R.id.resultFrame, map).commit();
                    return true;
                case R.id.nav_myTrips:
                    getChildFragmentManager().beginTransaction().replace(R.id.resultFrame, myTrips).commit();
                    return true;
                default:
                    return true;
            }
        }
    });
    return view;

此处是底部菜单代码的位置:

private FirebaseUser currentUser;

private BottomNavigationView navigationBar;
private FrameLayout mainFrameLayout;

private tripsFragment tripsFragment;
private messagesFragment messagesFragment;
private notificationFragment notificationFragment;
private profileFragment profileFragment;

private int LastFragment;

@Override
public void onBackPressed() {
    if(LastFragment != tripsFragment.getId())
    {
        getSupportFragmentManager().beginTransaction().replace(LastFragment, tripsFragment).commit();
        navigationBar.getMenu().getItem(0).setChecked(true);
    }
    else{
        super.onBackPressed();
        finishAffinity();
        finish();
    }

}

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_screen);
    currentUser = FirebaseAuth.getInstance().getCurrentUser();

    if(currentUser != null){
        boolean emailVerified = currentUser.isEmailVerified();
        if(emailVerified == false){
            Toast.makeText(MainScreen.this, "Email is not verified yet.", Toast.LENGTH_LONG).show();
        }
    }

    navigationBar  = findViewById(R.id.navigationBar);
    mainFrameLayout = findViewById(R.id.mainFrameLayout);

    tripsFragment = new tripsFragment();
    messagesFragment = new messagesFragment();
    notificationFragment = new notificationFragment();
    profileFragment = new profileFragment();

    getSupportFragmentManager().beginTransaction().replace(R.id.mainFrameLayout, tripsFragment).commit();
    LastFragment = tripsFragment.getId();

    navigationBar.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            switch (menuItem.getItemId())
            {
                case R.id.nav_Trips:
                    getSupportFragmentManager().beginTransaction().replace(R.id.mainFrameLayout, tripsFragment).commit();
                    LastFragment = tripsFragment.getId();
                    return true;
                case R.id.nav_Notifications:
                    getSupportFragmentManager().beginTransaction().replace(R.id.mainFrameLayout, notificationFragment).commit();
                    LastFragment = notificationFragment.getId();
                    return true;
                case R.id.nav_Messages:
                    getSupportFragmentManager().beginTransaction().replace(R.id.mainFrameLayout, messagesFragment).commit();
                    LastFragment = messagesFragment.getId();
                    return true;
                case R.id.nav_Profile:
                    getSupportFragmentManager().beginTransaction().replace(R.id.mainFrameLayout, profileFragment).commit();
                    LastFragment = profileFragment.getId();
                    return true;
                default:
                    return false;
            }
        }
    });
}

1 个答案:

答案 0 :(得分:0)

每次您从“旅行”到“消息”时,都会创建一个新的片段。但请记住,BottomNavigationView处于活动生命周期中,因此,当您再次从“消息”返回到“行程”时,将重新创建“行程”片段,但没有创建“ BottomNavigation”视图,因此它会记住选中的顶部导航项(本例中为“我的行程”案件)。您可以使用navigationBar.setSelectedItemId(int itemId)将顶部栏中所选项目的更改合并到onClick方法中。

编辑

好的,有了该代码,它应该是:

.cont1

将“ R.id.Posts”更改为帖子按钮的ID