我已经读过一些想法,但我仍然不明白该怎么做。 我有这个包含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。
修改 如果我有这个结构:
点击按钮后我想要这个结构:
答案 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();