Android - 新 BottomNavigationBar 中的 PageView - 防止重新加载片段
Android - PageView in new BottomNavigationBar - prevent reload fragments
在我的 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;
}
};
正如我上面提到的,我想防止所选片段总是重新加载 sources/view。
我尝试了一些东西,比如 - 在片段中:
if (rootView == null)
inflater.inflate...
但是片段仍然重新创建视图并加载(在我的例子中)新的 webresources。
我阅读了一些 PageView 可以提供帮助的内容,尤其是
offScreenPageLimit
应该施展魔法。
我的主要问题是我应该在哪里实现 PageViewer - 是否可以在我的 StartActivity 中实现?
或者我可以用其他方式解决问题吗?
我做到了孩子们!
没有必要ViewPager
。
这是我的解决方案(全部编码在 StartActivity
而不是 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)非常重要。
现在通过不加载每个片段在智能手机上实现高速性能 new/refresh。
在我的 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;
}
};
正如我上面提到的,我想防止所选片段总是重新加载 sources/view。 我尝试了一些东西,比如 - 在片段中:
if (rootView == null)
inflater.inflate...
但是片段仍然重新创建视图并加载(在我的例子中)新的 webresources。
我阅读了一些 PageView 可以提供帮助的内容,尤其是
offScreenPageLimit
应该施展魔法。
我的主要问题是我应该在哪里实现 PageViewer - 是否可以在我的 StartActivity 中实现? 或者我可以用其他方式解决问题吗?
我做到了孩子们!
没有必要ViewPager
。
这是我的解决方案(全部编码在 StartActivity
而不是 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)非常重要。
现在通过不加载每个片段在智能手机上实现高速性能 new/refresh。