Android 在ViewPager上处理每页超过1个片段

Android 在ViewPager上处理每页超过1个片段,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我一直使用FragmentActivity和TabHost以编程方式添加/删除/替换片段 我使用的是: public void addFragments(String tabName, Fragment fragment, boolean animate, boolean add, Bundle bundle) { currentSelectedTab = tabName; if (add) { hMapTabs.get(tabName).add

我一直使用FragmentActivity和TabHost以编程方式添加/删除/替换片段

我使用的是:

public void addFragments(String tabName, Fragment fragment,
        boolean animate, boolean add, Bundle bundle) {
    currentSelectedTab = tabName;

    if (add) {
        hMapTabs.get(tabName).add(fragment);
    }
    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction ft = manager.beginTransaction();
    if (animate) {
        ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);
    }
    if (bundle!=null){
        fragment.setArguments(bundle);
    }
    ft.replace(R.id.realtabcontent, fragment, tabName);
    ft.commitAllowingStateLoss();

}

public void removeFragment() {
    Fragment fragment = hMapTabs.get(currentSelectedTab).get(
            hMapTabs.get(currentSelectedTab).size() - 2);
    hMapTabs.get(currentSelectedTab).remove(
            hMapTabs.get(currentSelectedTab).size() - 1);
    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction ft = manager.beginTransaction();
    ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
    ft.replace(R.id.realtabcontent, fragment);
    ft.commitAllowingStateLoss();
}
这样,一切都正常

现在,我试图在我的ViewPager页面上管理此片段的行为

我在StackOverFlow上搜索了三个小时,每次都越来越困惑。例如,在FragmentPagerAdapter上尝试使用公共功能

唯一有效的方法就是让我在添加碎片时变成一个白色的空白屏幕

你会怎么做


提前谢谢。

我找到了解决问题的方法,但不知道是否有效

我正在定义一个HashMap来保存我的片段:

private HashMap<Integer, ArrayList<Fragment>> hMapTabs = new HashMap<Integer, ArrayList<Fragment>>();
从每个片段中,我可以使用以下函数添加或删除片段:

public void addFragment(int position, Fragment frag) {
    hMapTabs.get(position).add(frag);
    mCollectionPagerAdapter = new CollectionPagerAdapter(
            getSupportFragmentManager(), hMapTabs);
    mViewPager.setAdapter(mCollectionPagerAdapter);
}

public void removeFragment(int position) {
    hMapTabs.get(position).remove(
            hMapTabs.get(position).size() - 1);
    mCollectionPagerAdapter = new CollectionPagerAdapter(
            getSupportFragmentManager(), hMapTabs);
    mViewPager.setAdapter(mCollectionPagerAdapter);
}

@Override
public void onBackPressed() {
    int position = mViewPager.getCurrentItem();
    if (hMapTabs.get(position).size() <= 1) {
        super.onBackPressed();
    } else {
        removeFragment(position);
    }

}

但我不能做的是添加动画。。。我该怎么做D

当我第一次开始使用ViewPager时,我发现它很有用,但你是如何做到的?
public class CollectionPagerAdapter extends FragmentStatePagerAdapter {

    final int NUM_ITEMS = 3; // number of tabs
    FragmentManager fm;
    HashMap<Integer, ArrayList<Fragment>> hMapTabs;
    public CollectionPagerAdapter(FragmentManager fm, HashMap<Integer, ArrayList<Fragment>> hMapTabs) {
        super(fm);
        this.fm = fm;
        this.hMapTabs = hMapTabs;
    }

    @Override
    public Fragment getItem(int position) {
        return hMapTabs.get(position).get(hMapTabs.get(position).size()-1);
    }

    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        String tabLabel = null;
        switch (position) {
        case 0:
            tabLabel = "tab1";
            break;
        case 1:
            tabLabel = "tab2";
            break;
        case 2:
            tabLabel = "tab3";
            break;
     }

        return tabLabel;

    }
}
public void addFragment(int position, Fragment frag) {
    hMapTabs.get(position).add(frag);
    mCollectionPagerAdapter = new CollectionPagerAdapter(
            getSupportFragmentManager(), hMapTabs);
    mViewPager.setAdapter(mCollectionPagerAdapter);
}

public void removeFragment(int position) {
    hMapTabs.get(position).remove(
            hMapTabs.get(position).size() - 1);
    mCollectionPagerAdapter = new CollectionPagerAdapter(
            getSupportFragmentManager(), hMapTabs);
    mViewPager.setAdapter(mCollectionPagerAdapter);
}

@Override
public void onBackPressed() {
    int position = mViewPager.getCurrentItem();
    if (hMapTabs.get(position).size() <= 1) {
        super.onBackPressed();
    } else {
        removeFragment(position);
    }

}