首页 > 解决方案 > 在活动之间切换而无需重新启动或重新加载活动

问题描述

我在我的应用程序中使用底部导航。我有 2 个菜单项(主页、搜索)。每次用户尝试从其他活动切换回家庭活动时,我都不想重新启动家庭活动。我尝试在我的意图中添加 FLAG_ACTIVITY_REORDER_TO_FRONT 但它不起作用。

搜索活动

 bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()){
                case R.id.home:
                    Intent intent = new Intent();
                    startActivity(new Intent(getApplicationContext(),MainActivity.class));
                    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                    overridePendingTransition(0,0);
                    return true;
                case R.id.search:
                    break;
            return false;
        }
    });

标签: androidandroid-intentandroid-activitybottomnavigationview

解决方案


你可以做这样的事情。在片段的帮助下,active我们只是隐藏活动片段,显示新片段。

MainActivity.java

public class MainActivity extends AppCompatActivity {

final Fragment fragment_home = new HomeFragment();
final Fragment fragment_search = new DashboardFragment();
final FragmentManager fm = getSupportFragmentManager();
Fragment active = fragment_home;

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


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

    fm.beginTransaction().add(R.id.nav_host_fragment, fragment_search, "fragment_search").hide(fragment_search).commit();
    fm.beginTransaction().add(R.id.nav_host_fragment, fragment_home, "fragment_home").commit();

}


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

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_home:
                fm.beginTransaction().hide(active).show(fragment_home).commit();
                active = fragment_home;
                return true;

            case R.id.navigation_dashboard:
                fm.beginTransaction().hide(active).show(fragment_search).commit();
                active = fragment_search;
                return true;
        }
        return false;
    }
};}

推荐阅读