BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #27655同步于 2015/12/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

[问题]viewpager双层嵌套 内层刷新问题

nashiyue
2015/12/11镜像同步11 回复
主要模拟在ViewPager中的某一个fragment A,实现banner功能,banner也是使用viewpager实现,进入该fragment A的时候,没有问题,当从A切换到fragment B,再从B切换回A的时候,A中的banner 显示空白。(banner初始没有fragment,通过请求动态添加fragment,该fragment布局 就是一张图) 在onCreateView的时候,加载数据:观察切换回A的时候,确实调用了,但就是不显示图像,求指点~ private void initBannerData() { fragments = new ArrayList<Fragment>(); AsyncTask<String, Integer, String> task = new AsyncTask<String, Integer, String>() { @Override protected String doInBackground(String... params) { if (params.length == 1) { System.out.println("request for banner..."); return HttpHelper.requestByGet(params[0]); } return null; } @Override protected void onPostExecute(String result) { try { JSONObject jsonObject = new JSONObject(result); // Boolean success = jsonObject.getBoolean("success"); JSONObject data = (JSONObject) jsonObject.get("data"); JSONArray array = data.getJSONArray("mydata"); adapter.clear(); System.out.println("clear...."); for (int i = 0; i < array.length(); i++) { JSONObject obj = array.getJSONObject(i); BannerHolder holder = new BannerHolder(i, Preference.BASE_URL + obj.getString("pic_path")); holder.setTarget(obj.getInt("link_type") == 1 ? true : false); holder.setTargetUrl(obj.getString("link_value")); holder.setImgDesc(obj.getString("pic_desc")); holder.setTargetTitle(obj.getString("pic_name")); BannerFragment fragment = new BannerFragment(holder); // adapter.add(fragment); if (fragments == null) { fragments = new ArrayList<Fragment>(); } fragments.add(fragment); System.out.println("++++++++1"); } adapter.notifyDataSetChanged(); System.out.println("notify...."); System.out.println(fragments.size() + "....."); initDots(array.length()); } catch (JSONException e) { e.printStackTrace(); } } }; [ema23][ema23][ema23][ema0]
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
fuxuemingzhu机器人#1 · 2015/12/11
在onResume方法里加载刷新?
nashiyue机器人#2 · 2015/12/12
试了,没用~最后改成在切换的时候,如果有就用之前的,ok了 【 在 fuxuemingzhu (负雪明烛) 的大作中提到: 】 : 在onResume方法里加载刷新? 通过『我邮2.0』发布
sollian机器人#3 · 2015/12/12
你这样写,不是每一次都要new一遍fragment吗?fragment重用比较好吧
dss886机器人#4 · 2015/12/12
ViewPager.setOffscreenPageLimit(int);呢
nashiyue机器人#5 · 2015/12/12
试了,木有用 【 在 dss886 (打击楼主) 的大作中提到: 】 : ViewPager.setOffscreenPageLimit(int);呢 通过『我邮2.0』发布
nashiyue机器人#6 · 2015/12/12
有什么比较好的资料推荐吗?我现在如果view在,就通过parent remove的方式 【 在 sollian (sollian) 的大作中提到: 】 : 你这样写,不是每一次都要new一遍fragment吗?fragment重用比较好吧 通过『我邮2.0』发布
kuangfengwin机器人#7 · 2015/12/12
给个fragmentAdapter的代码? 或者你百度一下fragment视图丢失。。。。
nashiyue机器人#8 · 2015/12/12
【 在 kuangfengwin 的大作中提到: 】 : 给个fragmentAdapter的代码? : 或者你百度一下fragment视图丢失。。。。 package com.lw.fragments; import java.util.ArrayList; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.view.ViewGroup; public class BannerAdapter extends FragmentPagerAdapter { public BannerAdapter(FragmentManager fm) { super(fm); } public void add(Fragment fragment){ this.fragmentList.add(fragment); } public void clear(){ this.fragmentList.clear(); } public BannerAdapter(FragmentManager fragmentManager, ArrayList<Fragment> list) { super(fragmentManager); this.fragmentList = list; if(list == null){ this.fragmentList = new ArrayList<Fragment>(); } } private ArrayList<Fragment> fragmentList = new ArrayList<Fragment>(); public Fragment getItem(int position) { return fragmentList.get(position); } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); } public int getCount() { return fragmentList.size(); } public int getItemPosition(Object object) { return super.getItemPosition(object); } @Override public Object instantiateItem(ViewGroup container, int position) { return super.instantiateItem(container, position); } } 应该算比较常规的代码吧~
kuangfengwin机器人#9 · 2015/12/12
那个instantiateItem函数里,我一般这样写 switch(position) case 0: if(fragmentA==null){ fragmentA=new Fragment(); } else{ return fragmentA; } break; 就是一个FragmentPagerAdapter里只实例化一个fragmentA,有点像单例,你看看? 【 在 nashiyue 的大作中提到: 】 : : [code=java] : package com.lw.fragments; : ...................