viewpager下拉刷新数据怎么刷新

android Viewpager中fragment的数据刷新 - 博客频道 - CSDN.NET
小蒋的博客
分类:android
最近在做一个项目,主要的数据页面采用的是viewpager+fragment形式展示的,在开发过程中遇到了fragment数据更新问题:项目中我有4个fragment:fragmentA、fragmentB、fragmentC、及fragmentD,在fragmentB触发点击listview任一个item中的button时需要改变fragmentB中button状态和刷新fragmentC的页面数据。
正常情况下,ViewPager会默认加载当前页和当前页的左右两页。一开始当前页是下标0,所以一开始默认加载第0页(指下标,下同)和第1页。当你向右滑动,当前页为第1页时,ViewPager会加载第2页,这时一共有3页存在(第0,1,2页)。再向右滑动,当前页为第2页时,会移除第0页,加载第3页,同理向左滑动当前页为第1页时,会移除第3页。因此fragmentB触发点击事件时并不能实时改变相关控件状态和实现数据刷新。(因为fragmentB内容是listview,且每个listview的item都有一个Button,如果使用notifydatasetchanged(),那么点击一个Button,所有的Button状态都会改变),最后不断查资料、调试和请教他人,得到了一个解决方法,自己将解决思路记录一下,方便以后自己查阅,也为跟我碰到同样类似问题的小伙伴们提供一条思路,有不对的地方或者有更好建议请留言提出,大家一块学习。。。。。。
viewpager中如何嵌套fragment以及如何实现滑动和点击fragment之间的跳转功能百度有一大堆,我就不多说了,下面切入正题.解决思路:给每一个Fragment都打上了一个标签,通过标签来寻找相应的fragment,就可以对该fragment进行更新
首先,我们在viewpager所在的java类中定义一个List&String& tagLists 来存储一下tag.(注意:因为我的viewpager的适配器java类写在了viewpager所在的java类中,所以我定义在这里。若你的适配器java类是独立封装起来的,那么就在独立封装的适配器java类中定义List&String& tagLists)。
private List&String& tagL
其次,在适配器java类中重写instantiateItem方法,把fragment对应的标签存储在taglists集合里
public Object instantiateItem(ViewGroup container, int position) {
tagLists.add(makeFragmentName(container.getId(),
(int) getItemId(position)));
return super.instantiateItem(container, position);
代码中makeFragmentName()方法的实现
public static String makeFragmentName(int viewId, int index) {
return "android:switcher:" + viewId + ":" +
再次,在适配器的java类中写一个update()方法,用于指定更新哪个fragment,
public void update(int item) {
Fragment fragment = fm.findFragmentByTag(tagList.get(item));
if (fragment != null) {
switch (item) {
((FragmentB) fragment).query();
((FragmentC) fragment).query();
从代码看出,FragmentB和FragmentC中都有一个query()方法,这个方法是后面我们用接口回掉机制更新指定fragment要使用的方法,用于实现我们需要更新的内容。
接下来就是我们的重要环节了:通过接口回调机制来实现指定fragment的数据更新。
第一步,定义一个接口类,并在viewpager所在的java类中实现
public interface FragmentListener {
public void onFragmentClickListener(int item);
viewpager所在的java类中实现:
public void onFragmentClickListener(int item) {
adapter.update(item);
adapter.update(item);
第二步,在触发要更新fragement数据事件的fragment中重写onAttach()方法。比如我这里是点击fragmentB中一个Button,实现fragmentB中button状态的改变和fragmentC中的数据进行更新,那么就重写fragmentB的onAttach()方法。
private static FragmentL
public void onAttach(Activity activity) {
listener = (FragmentListener)
super.onAttach(activity);
这里定义为static是因为我的button点击事件是在fragmentB中listview的适配器java类中实现的,且这个适配器java类是独立封装出来的。若你的触发事件在fragment的java类中实现的,就不需要定义为static。
第三步,在我们需要对数据进行更新的时候,就调用我们自定义的接口,
if (FragmentB.listener != null) {
//FragmentB自身刷新
FragmentB.listener.onFragmentClickListener(1)
//FragmentC刷新
FragmentB.listener.onFragmentClickListener(2)
代码写到这里,fragment的数据跟新问题就基本解决了。由于是项目代码,因此源码就不贴出来了。
排名:千里之外
(5)(4)(0)经检测你所在的网络可能存在爬虫,因资源限制,我们只能拒绝你的请求。
如果你是推酷的用户,可以以继续访问使用。
如有疑问,可将IP信息发送到
请求解封。经检测你所在的网络可能存在爬虫,因资源限制,我们只能拒绝你的请求。
如果你是推酷的用户,可以以继续访问使用。
如有疑问,可将IP信息发送到
请求解封。Android下ViewPager 中怎么更新啊
- 开源中国社区
当前访客身份:游客 [
当前位置:
我现在用一个viewpager显示一些内容,想通过activity中的一些按钮的点击改变viewpager的显示内容,然后就创建了几个adapter,然后再点击的时候通过viewpager.setAdapter()重新设置适配器,但是显示内容没有改变?
请教各位怎么才能实现viewpager显示内容的改变
共有10个答案
<span class="a_vote_num" id="a_vote_num_
在线等回答啊
<span class="a_vote_num" id="a_vote_num_
<span class="a_vote_num" id="a_vote_num_
怎么没有人回答我呀
<span class="a_vote_num" id="a_vote_num_
快点来的人来回答一下嘛
<span class="a_vote_num" id="a_vote_num_
我也遇到同样的问题。等答案
<span class="a_vote_num" id="a_vote_num_
<span class="a_vote_num" id="a_vote_num_
试试重写一下下面的方法,
public int getItemPosition(Object object) {
return POSITION_NONE;
调用notifyDataSetChanged()方法时,viewPager会更新
<span class="a_vote_num" id="a_vote_num_
调用也不理想呀, 如果我有多个adapter来相互切换,比如第一个adapter的内容我滑动到第三页,然后我更换adapter它会初始化目前adapter的第四页 而不是从第一页开始初始化的。也就是说我上一次滑动到第几页现在它就从上一个adapter显示页面接着往下创建view。
<span class="a_vote_num" id="a_vote_num_
我貌似解决了& 调用 viewpager.setCurrentItem(0);可以让它显示更换以后的adapter显示第一个页面
<span class="a_vote_num" id="a_vote_num_
可以用广播。更新的地方发送一个广播。需要更新的地方接受广播。我试过,貌似可以,不知道能完成你的要求不。
更多开发者职位上
有什么技术问题吗?
尐帥鱼的其它问题
类似的话题发送私信成功
DevStore用户登录
还没有DevStore帐号?
快捷登录:
您目前的活力值不够下载该资源哦~~
怎么样快速获得活力值?
下载此资源将扣除活力值-20
(只在首次下载扣除活力值,之后可以免费下载)
为了尽快解决大伙儿的问题,请务必要找相对应的客服哦~
> 源码详情
viewPager+Fragment和上下拉刷新
10:00 && 浏览量(4374) &&
功能分类:特效
支持平台:Android
运行环境:Android
开发语言:Java
开发工具:Eclipse
源码大小:4.38MB
533 人下载
实现页面的左右滑动以及数据的上下拉刷新以及数据的加载
DevStore所有源码来自用户上传分享,版权问题及牵扯到商业纠纷均与DevStore无关。
private void init(){
ta = new TzAdapter(list, getActivity());
ta.setFragment(Fragment_one.this);
lv.setAdapter(ta);
lv.setMode(Mode.BOTH);
lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2(){
// 下拉Pulling Down
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
// 下拉的时候数据重置
list.clear();
for (int i = 0; i < 1; i++) {
User u=new User();
u.setName("哈哈"+i);
u.setMoney(i+1+"");
list.add(u);
ta.notifyDataSetChanged();
new FinishRefresh().execute();
// 上拉Pulling Up
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
// 上拉的时候添加选项
int count = list.size();
User u=new User();
u.setName("哈哈"+count++);
u.setMoney(count+++1+"");
list.add(u);
ta.notifyDataSetChanged();
new FinishRefresh().execute();
下载(533)
获取活力值
源码上传作者
资料下载排行
开发者交流群:
DevStore技术交流群2:
运营交流群:
产品交流群:
深圳尺子科技有限公司
深圳市南山区蛇口网谷万海大厦C栋504
Copyright (C) 2015 DevStore. All Rights Reserved}

我要回帖

更多关于 viewpager怎么刷新 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信