首页 文章

Viewpager:片段替换(交换)

提问于
浏览
0

我已经阅读了一些如何做到的想法,但我仍然不明白该怎么做 . 我有这个包含ViewPager的Activity .

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 .

EDIT: 如果我有这种结构:

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

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

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

3 回答

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

    我建议您查看this tutorial以获取有关使用ViewPager的更多信息 .

  • 0

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

  • 0

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

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

相关问题