2013-09-02 6 views
0

Я уже читал некоторые идеи, как это сделать, но все же я не понимаю, что делать. У меня есть эта активность, которая включает ViewPager.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(); 
    } 
} 

И теперь им пытаются заменить Fragment5 вместо Fragment3, если пользователь нажимает кнопку в Fragment3. Я читал, что должен использовать FragmentTransaction, но я не знаю, как использовать его для замены фрагмента.

EDIT: Если у меня есть эта структура:

  • [Fragment1] [FRAGMENT2] [Fragment3] [Fragment4]

после нажатия кнопки я хочу эту структуру:

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

ответ

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

Ты не понял меня. Если у меня есть эта структура: [Fragment1] [Fragment2] [Fragment3] [Fragment4] после нажатия кнопки Я хочу эту структуру: [Fragment1] [Fragment2] [Fragment5] [Fragment4] не просто показывает другой фрагмент. – SpeedEX505

0

У меня была такая же проблема, и я только что решил ее сегодня. Вы можете увидеть мое решение here. Я использую FragmentPagerAdapter вместо FragmentStatePagerAdapter, но я думаю, вы можете использовать его и будете работать.

0

попробуйте заменить текущий фрагмент с Фрагмент 3:

 getFragmentManager().beginTransaction() 
      .replace(R.id.container, new Fragment3()) 
      .addToBackStack(Fragment3.T).commit(); 
Смежные вопросы