有一段时间对Android使用viewpage和fragment有点混乱 特此整理一下
1、activity 直接包裹fragment
1)在layout中直接加入2)使用Fragmentmanager fm 动态添加
fm有 add remove replace hide方法对fragment控制
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
2、activity中使用viewpager 切换view
viewpager使用的adapter是继承自pageAdapter
至少覆盖以下方法
/**这个方法,return一个对象,这个对象表明了
PagerAdapter适配器选择哪个对象放在当前的ViewPager中**/
instantiateItem(ViewGroup, int)
/**这个方法,是从ViewGroup中移出当前View**/
destroyItem(ViewGroup, int, Object)
/**这个方法,是获取当前窗体界面数**/
getCount()
/**这个方法,在帮助文档中原文是could be implemented as return view == object,*也就是用于判断是否由对象生成界面**/
isViewFromObject(View, Object)
3、activity中使用viewpager 切换fragment
viewpager使用的adapter是继承自FragmentPagerAdapter或FragmentStatePagerAdapter
这两个的区别是FragmentStatePagerAdapter只保留当前页面,当页面离开视线后,就会被消除,释放其资源;在页面需要显示时,生成新的页面
在adapter中使用的data是FragmentList
需要重写的方法比2中的少一点
@Override
public int getCount()
{
return mFragments.size();
}
@Override
public Fragment getItem(int arg0)
{
return mFragments.get(arg0);
}
存在的问题FragmentPagerAdapter刷新无效果
解决方案
public Object instantiateItem(ViewGroup container, int position) {CarTypeInfoFragment f = (CarTypeInfoFragment)super.instantiateItem(container, position);
if(!QArrays.isEmpty(mRecList) && position >=0 && position < mRecList.size()){
CarTypeListMinPriceResult.CarTypeMinPrice p = mRecList.get(position);
if(p != null){
f.resetFragmentData(p);
}
}
return f;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
附上几个解决方案
http://blog.csdn.net/z13759561330/article/details/40737381