解决 ViewPage setAdapter()不更新数据的bug
Posted 薛萌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决 ViewPage setAdapter()不更新数据的bug相关的知识,希望对你有一定的参考价值。
public class HomeAdapter extends FragmentPagerAdapter
List<IndexDataEntity.DataBean.MorenBean> morenBeanList;
private FragmentManager fm;
public HomeAdapter(FragmentManager fm, List<IndexDataEntity.DataBean.MorenBean> morenBeanList)
super(fm);
this.fm = fm;
this.morenBeanList = morenBeanList;
@Override
public HomePageFragment getItem(int position)
return HomePageFragment.newInstance(Integer.parseInt(morenBeanList.get(position).getId()), Integer.valueOf(morenBeanList.get(position).getParametertype()));
@Override
public int getCount()
return morenBeanList.size();
@Override
public CharSequence getPageTitle(int position)
return morenBeanList.get(position).getParametername();
/**
* 重写FragmentPagerAdapter里边的方法,如果fragment存在的话会调用缓存里边的fragment
* 从而导致数据不更新问题
*
* @param container
* @param position
* @return
*/
public Object instantiateItem(ViewGroup container, int position)
//拿到缓存的fragment,如果没有缓存的,就新建一个,新建发生在fragment的第一次初始化时
HomePageFragment f = (HomePageFragment) super.instantiateItem(container, position);
String fragmentTag = f.getTag();
if (f != getItem(position))
//如果是新建的fragment,f 就和getItem(position)是同一个fragment,否则进入下面
FragmentTransaction ft = fm.beginTransaction();
//移除旧的fragment
ft.remove(f);
//换成新的fragment
f = getItem(position);
//添加新fragment时必须用前面获得的tag
ft.add(container.getId(), f, fragmentTag);
ft.attach(f);
ft.commitAllowingStateLoss();
return f;
以上是关于解决 ViewPage setAdapter()不更新数据的bug的主要内容,如果未能解决你的问题,请参考以下文章
Android中Scrollview嵌套viewpage问题:viewpage设置非固定高点,按照自定义的scrollview 还是不能解决.
setAdapter“调用需要 API 级别 11(当前最低为 8):android.widget.AbsListView#setAdapter”?