在ViewPager上每页使用多个片段

时间:2014-08-11 12:51:47

标签: android android-fragments android-viewpager

我一直与FragmentActivityTabHost合作,以编程方式添加/删除/替换Fragment

我使用的是:

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上尝试使用公共函数。

只有这样才能使我在添加片段时成为白色空白屏幕。

你会怎么做?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

我定义HashMap以保留我的碎片:

private HashMap<Integer, ArrayList<Fragment>> hMapTabs = new HashMap<Integer, ArrayList<Fragment>>();

然后我初始化它并添加我的每个位置的第一个片段(在这种情况下,片段是相同的)。

    hMapTabs.put(0, new ArrayList<Fragment>());
    hMapTabs.put(1, new ArrayList<Fragment>());
    hMapTabs.put(2, new ArrayList<Fragment>());

    hMapTabs.get(0).add(new PrimerFragment());
    hMapTabs.get(1).add(new PrimerFragment());
    hMapTabs.get(2).add(new PrimerFragment());

我将我的适配器设置为我的ViewPager。这将是FragmentAdapterPager

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);
    }

}

但我无法做的是添加动画...我该怎么做? :d