Viewpager:片段替换(交换)

时间:2013-09-02 21:02:42

标签: android replace android-fragments android-viewpager

我已经读过一些想法,但我仍然不明白该怎么做。 我有这个包含ViewPager的活动。

public class MainActivity extends FragmentActivity implements TabListener {
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainactivity);
        mViewPager = (ViewPager) findViewById(R.id.mainactivity_pager);
    mAdapter = new MyPagerAdapter(getSupportFragmentManager());
    mViewPager.setAdapter(mAdapter);
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }
    });
    for (int i = 0; i < mAdapter.getCount(); i++) {
        actionBar.addTab(
            actionBar.newTab()
            .setText(mAdapter.getPageTitle(i))
            .setTabListener(this));
    }
}

这是MyPagerAdapter:

private class MyPagerAdapter extends FragmentStatePagerAdapter{

    ArrayList<Fragment> fragments = new ArrayList<Fragment>();

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
        fragments.add(new Fragment1());
        fragments.add(new Fragment2());
        fragments.add(new Fragment3());
        fragments.add(new Fragment4());
    }  
    @Override
    public Fragment getItem(int i) {
        return fragments.get(i);
    }
    @Override
    public int getCount() {
        return fragments.size();
    }
}

如果用户单击Fragment3中的按钮,我现在尝试替换Fragment5而不是Fragment3。我读过我应该使用FragmentTransaction但我不知道如何使用它来替换Fragment。

修改 如果我有这个结构:

  • [Fragment1] [Fragment2] [Fragment3] [Fragment4]

点击按钮后我想要这个结构:

  • [片段1] [Fragment2] [Fragment5] [Fragment4]

3 个答案:

答案 0 :(得分:0)

您不需要使用FragmentTransaction。

只需从按钮的onClick事件中调用mViewPager。setCurrentItem(X),告诉ViewPager它应该显示哪个片段。

例如,

@Override
public void onClick(View view) {
    //Notice the index is exactly like in arrays, starting from 0...
    //Check if current fragment is number 3
    if (mViewPager.getCurrentItem() == 2) {
        //Tell ViewPager to show fragment number 5
        mViewPager.setCurrentItem(4);
    }
}

我建议您查看this tutorial,了解有关使用ViewPager的更多信息。

答案 1 :(得分:0)

我有同样的问题,我今天刚解决了。您可以看到我的解决方案here。我使用FragmentPagerAdapter代替FragmentStatePagerAdapter,但我认为您可以使用它并且可以使用。

答案 2 :(得分:0)

尝试用片段3替换当前片段:

     getFragmentManager().beginTransaction()
           .replace(R.id.container, new Fragment3())
           .addToBackStack(Fragment3.T).commit();