0

I already read some ideas how to do that but still I dont understand what to do. I have this Activity which includes 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));
    }
}

This is 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();
    }
}

And now im trying to replace Fragment5 instead of Fragment3 if user click a button in Fragment3. I read I should use FragmentTransaction but I dont know how to use it to replace Fragment.

EDIT: If I have this structure:

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

after button click I want this structure:

  • [Fragment1][Fragment2][Fragment5][Fragment4]
Ben Weiss
  • 17,182
  • 6
  • 67
  • 87
SpeedEX505
  • 1,976
  • 4
  • 22
  • 33

3 Answers3

0

You don't need to use FragmentTransaction.

Simply call mViewPager.setCurrentItem(X) from your button's onClick event to tell the ViewPager which fragment it should show.

For instance,

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

I recommend you check out this tutorial for more info about using ViewPager.

Nimrod Dayan
  • 3,050
  • 4
  • 29
  • 45
  • You didn't understand me. If I have this structure: [Fragment1][Fragment2][Fragment3][Fragment4] after button click I want this structure: [Fragment1][Fragment2][Fragment5][Fragment4] not just show another fragment. – SpeedEX505 Sep 02 '13 at 21:31
0

I had same problem and I've just solved it today. You can see my solution here. I use FragmentPagerAdapter instead of FragmentStatePagerAdapter, but I think you can use it and will work.

Community
  • 1
  • 1
Lyd
  • 2,106
  • 3
  • 26
  • 33
0

try replace current fragment with Fragment 3:

     getFragmentManager().beginTransaction()
           .replace(R.id.container, new Fragment3())
           .addToBackStack(Fragment3.T).commit();
EugenUngurean
  • 429
  • 3
  • 14