0

我已经阅读了一些如何做到这一点的想法,但我仍然不明白该怎么做。我有这个活动,其中包括 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。

编辑: 如果我有这个结构:

  • [片段1][片段2][片段3][片段4]

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

  • [片段1][片段2][片段5][片段4]
4

3 回答 3

0

我有同样的问题,我今天刚刚解决了。你可以在这里看到我的解决方案。我使用FragmentPagerAdapter而不是FragmentStatePagerAdapter,但我认为你可以使用它并且会工作。

于 2013-09-04T14:24:02.367 回答
0

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

     getFragmentManager().beginTransaction()
           .replace(R.id.container, new Fragment3())
           .addToBackStack(Fragment3.T).commit();
于 2013-09-04T14:39:15.223 回答
0

您不需要使用 FragmentTransaction。

只需调用 mViewPager。setCurrentItem (X) 从按钮的 onClick 事件告诉 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);
    }
}

我建议您查看本教程以获取有关使用 ViewPager 的更多信息。

于 2013-09-02T21:26:07.120 回答