您的位置:首页 > 编程语言 > PHP开发

ViewPager+FragmentPagerAdapter跟ViewPager+FragmentStatePagerAdapter的区别

2015-11-05 17:54 609 查看
1.ViewPager+FragmentPagerAdapter中的FragmentPagerAdapter适配器上会有一个FragmentTransaction ft =mFragmentManager.beginTransaction();他主要是对Fragment进行重新排序,但是本人弄了好久了也是没有用,因为他会把之前的Fragment集合放在一个FragmentManager管理器中,而很难去改变他们的顺序.对于这种方法本人还是不能搞定,如果有哪位好友告诉我的话,定当感激不尽.

2.后来发现有另外一个适配器FragmentStatePagerAdapter,他就比较好点,可以对之前的Fragment重新排序.

下列是FragmentstatePagerAdapter的一个实例:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

import java.util.List;

public class BaseFragmentPagerAdapter extends FragmentStatePagerAdapter {

private List<Fragment> mFragments;
public BaseFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragments) {
super(fm);
mFragments = fragments;
}

@Override
public int getCount() {
return mFragments.size();
}

@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}

@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}

public void setItems(List<Fragment> fragmentList) {
mFragments.clear();
if (fragmentList != null) {
addItems(fragmentList);
} else {
notifyDataSetChanged();
}
}

public void addItems(List<Fragment> fragmentList) {
if (fragmentList != null) {
mFragments = fragmentList;
notifyDataSetChanged();
}
}
}


4.进行比对的一个方法:

public void syncTabs(List<X> itemList) {
List<X> items = mItems;
List<Fragment> fragments = mFragments;
List<View> views = mViews;

mRadioGroupContent.removeAllViews();
mItems = itemList;
mFragments = new ArrayList<Fragment>();

if (mAdapter != null) {
int i = 0;
for (X item : itemList) {
int id = comparingNewInOldId(items, item);
if (id < items.size()) {
mRadioGroupContent.addView(views.get(id));
mFragments.add(fragments.get(id));

} else {
mRadioGroupContent.addView(newTopView(i));
mFragments.add(newTopFragment(i));
}
i++;
}
mAdapter.setItems(mFragments);
}
mViews = getNewTopView();

setSelect();
}

public int comparingNewInOldId(List<X> oldItems,X newItem) {
int index = 0;
for (X item1 : oldItems) {
String set1 = newItem.getName();
String set2 = item1.getName();
if (!TextUtils.isEmpty(set1) && !TextUtils.isEmpty(set2)) {
if (set1.equals(set2)) {
break;
}
}
index += 1;
}
return index;
}

private void setSelect() {
selectTab(columnSelectIndex);//选择那个TAB
mViewPager.setCurrentItem(columnSelectIndex);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: