【问题标题】:Viewpager: fragment replacement (exchange)Viewpager:片段替换(交换)
【发布时间】:2013-09-02 21:02:41
【问题描述】:

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

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

  • [Fragment1][Fragment2][Fragment5][Fragment4]

【问题讨论】:

    标签: android replace android-fragments android-viewpager


    【解决方案1】:

    您不需要使用 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 的更多信息。

    【讨论】:

    • 你不明白我的意思。如果我有这个结构:[Fragment1][Fragment2][Fragment3][Fragment4] 按钮单击后我想要这个结构:[Fragment1][Fragment2][Fragment5][Fragment4] 不只是显示另一个片段。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-28
        • 1970-01-01
        相关资源
        最近更新 更多