android 从viewpager中删除一个fragment的方法?怎么解决 在线等
2个回答
2016-08-18
展开全部
为了解决彻底删除fragment,我们要做的是:
1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就一直在内存中,在这个过程中无论你怎么刷新,清除都是无用的,直至程序退出; 后者 可以满足我们的需求。
2.我们可以重写Adapter的方法--getItemPosition(),让其返回PagerAdapter.POSITION_NONE即可。
[java] view plain copy
以下为引用内容:
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return PagerAdapter.POSITION_NONE;
}
我最后的代码:
[java] view plain copy
package com.yang.Adapter;
import java.util.ArrayList;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
private static final String TAG = "MyFragmentPagerAdapter";
// private ArrayList<OpilistItem> lists;
private ArrayList<Fragment> mList;
private Context mContext;
public MyFragmentPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.mContext = context;
mList = new ArrayList<Fragment>();
}
public void setLists(ArrayList<Fragment> lists) {
this.mList = lists;
}
public void UpdateList(ArrayList<Fragment> arrayList) {
this.mList.clear();
this.mList.addAll(arrayList);
notifyDataSetChanged();
}
@Override
public Fragment getItem(int arg0) {
// Fragment ft = null;
//
// ft = new DateShow(mContext);
// for (int i = 0; i < lists.get(arg0).openplayitem.size(); i++) {
// Log.i(TAG,
// "arg0=" + arg0 + "name="
// + lists.get(arg0).openplayitem.get(i).moviename);
// }
//
// Bundle args = new Bundle();
// args.putSerializable("date_title", lists.get(arg0).openplayitem);
// ft.setArguments(args);
// return ft;
return mList.get(arg0);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return PagerAdapter.POSITION_NONE;
}
}
之前还有一个问题,就是在fragment中报空指针异常,是因为我要加载的动态加载的fragment只有一个,但是viewpager默认会去加载下一个,使得浏览流畅,从我注释的代码中可以看到,数据的传递是通过bundle,造成预加载的时候数据成空,造成空指针异常,解决的办法是在fragment的onCreateView方法中判断数据是否为空,然后再判断是不是生成并返回view。
1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就一直在内存中,在这个过程中无论你怎么刷新,清除都是无用的,直至程序退出; 后者 可以满足我们的需求。
2.我们可以重写Adapter的方法--getItemPosition(),让其返回PagerAdapter.POSITION_NONE即可。
[java] view plain copy
以下为引用内容:
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return PagerAdapter.POSITION_NONE;
}
我最后的代码:
[java] view plain copy
package com.yang.Adapter;
import java.util.ArrayList;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
private static final String TAG = "MyFragmentPagerAdapter";
// private ArrayList<OpilistItem> lists;
private ArrayList<Fragment> mList;
private Context mContext;
public MyFragmentPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.mContext = context;
mList = new ArrayList<Fragment>();
}
public void setLists(ArrayList<Fragment> lists) {
this.mList = lists;
}
public void UpdateList(ArrayList<Fragment> arrayList) {
this.mList.clear();
this.mList.addAll(arrayList);
notifyDataSetChanged();
}
@Override
public Fragment getItem(int arg0) {
// Fragment ft = null;
//
// ft = new DateShow(mContext);
// for (int i = 0; i < lists.get(arg0).openplayitem.size(); i++) {
// Log.i(TAG,
// "arg0=" + arg0 + "name="
// + lists.get(arg0).openplayitem.get(i).moviename);
// }
//
// Bundle args = new Bundle();
// args.putSerializable("date_title", lists.get(arg0).openplayitem);
// ft.setArguments(args);
// return ft;
return mList.get(arg0);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return PagerAdapter.POSITION_NONE;
}
}
之前还有一个问题,就是在fragment中报空指针异常,是因为我要加载的动态加载的fragment只有一个,但是viewpager默认会去加载下一个,使得浏览流畅,从我注释的代码中可以看到,数据的传递是通过bundle,造成预加载的时候数据成空,造成空指针异常,解决的办法是在fragment的onCreateView方法中判断数据是否为空,然后再判断是不是生成并返回view。
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询