返回信息流主要模拟在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]
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #27655同步于 2015/12/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
[问题]viewpager双层嵌套 内层刷新问题
nashiyue
2015/12/11镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
试了,没用~最后改成在切换的时候,如果有就用之前的,ok了
【 在 fuxuemingzhu (负雪明烛) 的大作中提到: 】
: 在onResume方法里加载刷新?
通过『我邮2.0』发布
试了,木有用
【 在 dss886 (打击楼主) 的大作中提到: 】
: ViewPager.setOffscreenPageLimit(int);呢
通过『我邮2.0』发布
有什么比较好的资料推荐吗?我现在如果view在,就通过parent remove的方式
【 在 sollian (sollian) 的大作中提到: 】
: 你这样写,不是每一次都要new一遍fragment吗?fragment重用比较好吧
通过『我邮2.0』发布
【 在 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);
}
}
应该算比较常规的代码吧~
那个instantiateItem函数里,我一般这样写
switch(position)
case 0:
if(fragmentA==null){
fragmentA=new Fragment();
}
else{
return fragmentA;
}
break;
就是一个FragmentPagerAdapter里只实例化一个fragmentA,有点像单例,你看看?
【 在 nashiyue 的大作中提到: 】
:
: [code=java]
: package com.lw.fragments;
: ...................