android 数据刷新问题,Android FragmentStatePagerAdapter.notifyDataSetChanged()刷新数据的问题...

在使用FragmentStatePagerAdapter时,调用其notifyDataSetChanged()方法想让Fragment重新加载,让内部的数据刷新。但是调用后,发现根本没有任何作用,特别郁闷,看了百度上的一篇文章,感觉还不错,由此得来启发。http://blog.csdn.net/u012296101/article/details/46411515

我要实现这么一个效果:在主界面上做分页显示数据,通过左右滑动来控制上一页或者下一页。主界面上有一个设置按钮,进入后可以对数据进行更改,当我更改数据再返回主界面的时候,上面的数据应该有刷新。

思路:

1,页数可能无限多,所以应该选用FragmentStatePagerAdapter而不是FragmentPagerAdapter

2,在返回到Activity时触发onRestart()方法,在这个时候我应该判断数据是否有发生改变,如果改变了我就notifyDataSetChanged()更新,让Fragment重新加载获取数据

正常调用notifyDataSetChanged()方法界面是不会更新的,研究发现,想让该方法有效,比较简单的做法就是重写getItemPosition()方法,代码如下:

/**

* 在调用notifyDataSetChanged()方法后,随之会触发该方法,根据该方法返回的值来确定是否更新

* object对象为Fragment,具体是当前显示的Fragment和它的前一个以及后一个

*/

@Override

public int getItemPosition(Object object) {

return POSITION_NONE;// 返回发生改变,让系统重新加载

// 系统默认返回的是 POSITION_UNCHANGED,未改变

// return super.getItemPosition(object);

}

将它的返回值改为POSITION_NONE就好了(默认返回的是POSITION_UNCHANGED,详见上面的链接),那么调用notifyDataSetChanged()方法时,就会每次都去加载新的Fragment,而不是引用之前的。

源码奉上:

public class FrgTest extends FragmentActivity{

public static int loadPosition;

public static boolean dataChange = false;

private ViewPager viewPager;

private FragmentAdapter fragmentAdapter;

public void initFragment(List ropeGroupList){

fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(), ropeGroupList);

viewPager.setAdapter(fragmentAdapter);

// viewPager.setOnPageChangeListener(new OnPageChangeListener() {});

}

@Override

protected void onRestart() {

// 在从另外一个窗体返回时,检查数据是否有更新

if (dataChange) {

// 调用更新窗体

fragmentAdapter.notifyDataSetChanged();

dataChange = false;

}

super.onRestart();

}

private class FragmentAdapter extends FragmentStatePagerAdapter{

private List ropeGroupList;

public FragmentAdapter(FragmentManager fm, List ropeGroupList) {

super(fm);

this.ropeGroupList = ropeGroupList;

}

@Override

public Fragment getItem(int position) {

loadPosition = position;

RopeGroupFragment fragment = new RopeGroupFragment();

return fragment;

}

@Override

public int getCount() {

return this.ropeGroupList.size();

}

/**

* 在调用notifyDataSetChanged()方法后,随之会触发该方法,根据该方法返回的值来确定是否更新

* object对象为Fragment,具体是当前显示的Fragment和它的前一个以及后一个

*/

@Override

public int getItemPosition(Object object) {

return POSITION_NONE;// 返回发生改变,让系统重新加载

// 系统默认返回的是 POSITION_UNCHANGED,未改变

// return super.getItemPosition(object);

}

}

private class RopeGroupFragment extends BaseFragment{

private GridView gv_rp;

private RopeGridViewAdapter ropeAdapter;

private int curGroupPosition;

private List mData;

public RopeGroupFragment() {

// 将数据保存到当前界面

curGroupPosition = FrgTest.loadPosition;

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_rope_group, null);

gv_rp = (GridView) view.findViewById(R.id.gv_rp);

mData = ScoresDBManager.getInstance(mContext).getRopePlayerBeans(RopeAPP.getIdByGame(), curGroupPosition);

ropeAdapter = new RopeGridViewAdapter(mContext, mData);

gv_rp.setAdapter(ropeAdapter);

return view;

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值