先说下我的情况我是一个activity 里有四个fragment 然后fragment 加载的是webview,第一次加载会出来,切换到其它fragment的时候,再次切换回来就显示不出来webview;情况类似下面这个小伙伴
https://bbs.youkuaiyun.com/topics/392028670
原因是因为我fragment切换的时候用的是
beginTransaction().replace方法 导致每次切换的时候都会创建一个fragment原代码
public void replaceViewFragment2(Fragment viewFr, String tag) {
if (viewFr == currentViewFr) {
return;
}
fargmentManager.beginTransaction().replace(R.id.ill_main, viewFr)
.commitAllowingStateLoss();
currentViewFr = viewFr;
InputMethodManager imm = (InputMethodManager)
getSystemService(INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(getWindow().getDecorView()
.getWindowToken(), 0);
}
}
调用方法
private FragmentManager fargmentManager =this.getSupportFragmentManager();;
private void initFragment() {
Fragment fragment = null;
if (homeFragment == null)
homeFragment = new HomeFragment();
fragment = homeFragment;
replaceViewFragment2(fragment, fragment.getClass().getName());
}
修改后代码
//第一步先初始化
private Fragment currentFragment=new Fragment();
//第二部首次启动初始化fragment
private void initFragment() {
Fragment fragment = null;
if (homeFragment == null)
homeFragment = new HomeFragment();
fragment = homeFragment;
switchFragment(fragment).commit();
// replaceViewFragment2(fragment, fragment.getClass().getName());
}
//第三步 封装接口判断是有实例化过得fragment还是已经实例化过得,如果没实例化过就实例化,实例化过得就直接显示,保证每个fragment只实例化一次 ill_main是指你具体的fragment id
private FragmentTransaction switchFragment(Fragment targetFragment){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (!targetFragment.isAdded()) {
//第一次使用switchFragment()时currentFragment为null,所以要判断一下
if (currentFragment != null) {
transaction.hide(currentFragment);
}
transaction.add(R.id.ill_main, targetFragment,targetFragment.getClass().getName());
}else {
transaction
.hide(currentFragment)
.show(targetFragment);
}
currentFragment = targetFragment;
return transaction;
}
//第四步 切换tab的时候调用 封装好的方法,记得传入fragment
// 切换tab
private void changeTabSelect(TabLayout.Tab tab) {
Fragment fragment = null;
if (tab.getText().toString().equals("首页")) {
tab.setIcon(R.mipmap.foot_rhome);
if (homeFragment == null)
homeFragment = new HomeFragment();
fragment = homeFragment;
switchFragment(fragment).commit();
}else if (tab.getText().toString().equals("关注")) {
tab.setIcon(R.mipmap.foot_rgz);
if (followFragment == null)
followFragment = new FollowFragment();
fragment = followFragment;
switchFragment(fragment).commit();
}else if (tab.getText().toString().equals("开奖")) {
tab.setIcon(R.mipmap.foot_rkj);
if (lotteryFragment == null)
lotteryFragment = new LotteryFragment();
fragment = lotteryFragment;
switchFragment(fragment).commit();
}else if (tab.getText().toString().equals("我的")) {
tab.setIcon(R.mipmap.foot_rmy);
if (mineFragment == null)
mineFragment = new MineFragment();
fragment = mineFragment;
switchFragment(fragment).commit();
}
// replaceViewFragment2(fragment, fragment.getClass().getName());
}
我是参考了这位大佬的博客,希望能解决你们的问题