0%

Fragment小结

一、从Activity返回到Fragment刷新页面

问题:从Fragment跳转到Activity后有Activity返回到起跳的Fragment数据无法刷新(方法不是很优雅,勉强可是实现,如果您知道更好的方法,望告知,谢谢!)

解决方案:
在onStart()方法中在调用一次加载数据的方法。

简要分析:
Fragment跳转到Activity中会调用onStop()方法,此时页面内容不会发生改变,当activity页面finsh掉后Fragment可见,将会执行onStart()方法。

代码如下:

1
2
3
4
5
@Override
public void onResume() {
super.onResume();
initData();
}

二、在Fragment中嵌套使用viewpagerindicator切换Fragment返回后出现空白页

先贴代码:

1
2
3
4
5
6
7
8
9
10
mAdapter = new OrderAdapter(getChildFragmentManager());
ViewPager pager = (ViewPager) v.findViewById(R.id.pager);
pager.setAdapter(mAdapter);

TabPageIndicator indicator = (TabPageIndicator) v.findViewById(R.id.indicator);
// 将viewpager和mIndicator关联起来,必须在viewpager设置完adapter后才能调用
indicator.setViewPager(pager);

//设置当前页面
indicator.setCurrentItem(HttpConfig.fragment_list_Index);
  1. 将之前的 getActivity().getSupportFragmentManager() 改为getChildFragmentManager(),修改后切换fragment在返回不会出现空白页,原因不明,但据logcat显示,三个页面会同时加载(一共就搞了三个)

注意:这个方法没有效果setOffscreenPageLimit();

  1. 设置当前页面需设置indicator的属性,设置pager无效

三、关于FragmentPagerAdapter页面预加载的解决方案

setUserVisibleHint方法会在onCreate方法之前执行并且进行判断,即可以设置页面为只有当前fragment可见时,才会加载数据。

1
2
3
4
5
6
7
8
9
10
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
if (isVisibleToUser) {
//fragment可见时加载数据
} else {
//不可见时不执行操作,跳出
return;
}
super.setUserVisibleHint(isVisibleToUser);
}