2

在我的 StartActivity 中,BottomNavigationBar 侦听器具有以下设置:

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。

我读到了 PageView 可以提供帮助的东西,尤其是

offScreenPageLimit

应该做魔术。

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

4

1 回答 1

4

我做到了男孩们!没有ViewPager必要。

这是我的解决方案(全部编码为StartActivitynot in Fragments):

private final GuideFragment guideFragment = new GuideFragment();
private final MapFragment mapFragment = new MapFragment();
private final MoreFragment moreFragment = new MoreFragment();
private final android.app.FragmentManager fm = getFragmentManager();
Fragment active = guideFragment;

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

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_guide:
                if(active != guideFragment) {
                    fm.beginTransaction().show(guideFragment).commit();
                }
                else {
                    fm.beginTransaction().hide(active).show(guideFragment).commit();
                }
                active = guideFragment;
                break;
            case R.id.navigation_map:
                fm.beginTransaction().hide(active).show(mapFragment).commit();
                active = mapFragment;
                break;
            case R.id.navigation_more:
                fm.beginTransaction().hide(active).show(moreFragment).commit();
                active = moreFragment;
                break;
        }

        return true;
    }

};

并在 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) 非常重要。

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

于 2017-06-05T22:49:10.983 回答