Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-新底部导航栏中的PageView-防止重新加载片段_Android_Android Fragments_Bottomnavigationview_Fragment Oncreateview - Fatal编程技术网

Android-新底部导航栏中的PageView-防止重新加载片段

Android-新底部导航栏中的PageView-防止重新加载片段,android,android-fragments,bottomnavigationview,fragment-oncreateview,Android,Android Fragments,Bottomnavigationview,Fragment Oncreateview,在my StartActivity中,底部导航栏侦听器具有以下设置: private GuideFragment guideFragment = new GuideFragment(); private MapFragment mapFragment = new MapFragment(); private MoreFragment moreFragment = new MoreFragment(); private BottomNavigationView.OnNavigationItemS

在my StartActivity中,底部导航栏侦听器具有以下设置:

private GuideFragment guideFragment = new GuideFragment();
private MapFragment mapFragment = new MapFragment();
private MoreFragment moreFragment = new MoreFragment();

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

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment selectedFragment = null;
        switch (item.getItemId()) {
            case R.id.navigation_guide:
                selectedFragment = guideFragment;
                break;
            case R.id.navigation_map:
                selectedFragment = mapFragment;
                break;
            case R.id.navigation_more:
                selectedFragment = moreFragment;
                break;
        }
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        transaction.replace(R.id.content, selectedFragment);
        transaction.commit();
        return true;
    }

};
正如我上面提到的,我希望防止所选片段总是重新加载源代码/视图。 我尝试了一些东西,比如-在片段中:

if (rootView == null)
     inflater.inflate...
但是片段仍然会重新创建视图并加载(在我的例子中)新的webresources

我读了一些网页浏览可以帮助我的东西,尤其是

offScreenPageLimit
我们应该变魔术

我的主要问题是我应该在哪里实现PageViewer——在我的StartActivity中是否可能? 或者我可以用其他方法解决这个问题吗?

我做到了,孩子们! 不需要
ViewPager

这是我的解决方案(所有代码都在
StartActivity
中编码,而不是在
Fragments
中编码):

并在onCreate列表中提交事务

fm.beginTransaction().add(R.id.content,moreFragment).commit();
fm.beginTransaction().add(R.id.content, mapFragment).commit();
fm.beginTransaction().add(R.id.content, guideFragment).commit();
如果您有3个选项卡,那么最后提交第一个选项卡片段(fragm3、fragm2、fragm1)非常重要


通过不加载每个新片段/刷新片段,智能手机现在可以实现高速性能。

您的片段内容是直接相关还是间接相关?也就是说,在没有其他片段的情况下,每个片段的内容是否能够存在并有意义?如果没有,那么也许用
ViewPager
切换选项卡式导航更适合您的要求。所有三个片段都在不同的视图/选项卡中。视图寻呼机是一个自己的类,还是我可以把它添加到我的活动中?或者我正确地理解它——我是否应该删除底部导航并用一个VIEWPER替换它?是的——考虑你正在显示的内容类型,并选择最佳的小部件来显示内容。查看并查看ViewPager文档。可能
ViewPager
更适合您的要求。好的,谢谢CzarMatt。但我真的不能相信Android/Google团队在不处理片段生命周期的情况下提供了底部导航栏。当然,这是一个有点新的东西-但总是调用一个选项卡的新实例是。。。
fm.beginTransaction().add(R.id.content,moreFragment).commit();
fm.beginTransaction().add(R.id.content, mapFragment).commit();
fm.beginTransaction().add(R.id.content, guideFragment).commit();