在上一篇中说到的懒加载,实现了滑动更新,但如果是在别的界面返回数据,需要刷新viewPager当前的显示界面时,就有可能获取不到界面,导致刷新不成功,代码做以下修改。(不使用上篇的方式实现懒加载)
viewpager使用系统所给的:
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"/>
viewPager的适配器继承自 FragmentStatePagerAdapter
public class xxxViewPagerAdapter extends FragmentStatePagerAdapter{
//省略无关代码
public xxxViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
int year = getYearByPosition(position);
int month = getMonthByPosition(position);
Fragment fragment = xxxViewFragment.newInstance(position);
return fragment;
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
重点是xxxViewFragment.java:
首先:
private boolean isPrepared = false;
private static int Position;
public xxxViewFragment() {
}
public static Fragment newInstance(int position) {
Position = position;
xxxViewFragment fragment = new xxxViewFragment();
return fragment;
}
然后在onCreateView写:
isPrepared = true;
if (Position==??&& getUserVisibleHint()){
//数据加载+初始化
}
这里的??指的是初次传过来的界面位置,可以Log日志打印以下。
再后来就是setUserVisibleHint的方法:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isPrepared && isVisibleToUser) {
//加载数据
}
}
如此便实现了每次滑动刷新,也支持数据返回刷新。
参考网址 https://blog.csdn.net/qq_37100606/article/details/80130209