2012-09-01 36 views
27

¿Cómo se configura una pestaña predeterminada cuando se crea FragmentActivity por primera vez? Tengo 5 pestañas y quiero que se abra en la pestaña 2, no en 1. Parece que debería ser mucho más fácil de lo que es.Establecer pestaña predeterminada para la configuración de Fragment/ViewPager

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fragment_layout); 

     mSectionsPagerAdapter = new SectionsPagerAdapter(
       getSupportFragmentManager()); 

     final ActionBar actionBar = getActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     mViewPager = (ViewPager) findViewById(R.id.viewpager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     mViewPager 
       .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
        @Override 
        public void onPageSelected(int position) { 
         actionBar.setSelectedNavigationItem(position); 

        } 
       }); 

     for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 
      actionBar.addTab(actionBar.newTab() 
        .setText(mSectionsPagerAdapter.getPageTitle(i)) 
        .setTabListener(this)); 
     } 


    } 

    public void onTabUnselected(ActionBar.Tab tab, 
      FragmentTransaction fragmentTransaction) { 

    } 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 
     super.onSaveInstanceState(savedInstanceState); 
    } 

    @Override 
    public void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 

    } 

    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { 
     mViewPager.setCurrentItem(tab.getPosition()); 
    } 

    public void onTabReselected(ActionBar.Tab tab, 
      FragmentTransaction fragmentTransaction) { 
    } 

    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      Fragment f = null; 
      switch (position) { 
      case 0: { 
       f = new MasterFrag(); 
       Bundle args = new Bundle(); 

       f.setArguments(args); 
       break; 
      } 


       // case 1 - 3 edited out; i'd like default view "case 1". 

     default: 
       throw new IllegalArgumentException("not this many fragments: " 
         + position); 
      } 

      return f; 

     } 

     @Override 
     public int getCount() { 
      return 4; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
      case 0: 
       return getString(R.string.mastercattab1).toUpperCase(); 

        // case 1- 3 edited out 

      } 
      return null; 
     } 
    } 

Y mi XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TabHost 
     android:id="@android:id/tabhost" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical" > 

      <TabWidget 
       android:id="@android:id/tabs" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="0" 
       android:orientation="horizontal" /> 

      <FrameLayout 
       android:id="@android:id/tabcontent" 
       android:layout_width="0dp" 
       android:layout_height="0dp" 
       android:layout_weight="0" /> 

      <android.support.v4.view.ViewPager 
       android:id="@+id/viewpager" 
       android:layout_width="fill_parent" 
       android:layout_height="0dp" 
       android:layout_weight="1" /> 
     </LinearLayout> 
    </TabHost> 

</LinearLayout> 

Respuesta

76

Ha intentado llamar mViewPager.setCurrentItem(tab.getPosition()); al final de onCreate()?

+23

Lo suficientemente cerca, hice 'mViewPager.setCurrentItem (1);' y funcionó perfecto. – KickingLettuce

+1

@ Flynny75 no está relacionado con esta pregunta, pero puede decirme cómo puedo encontrar esa pestaña que se ha seleccionado, para poder realizar algunas acciones cuando se selecciona una determinada pestaña –

+1

@DawoodAwan Sé que es tarde. Podría intentar 'mViewPager.getCurrentItem()'. – Sufian

Cuestiones relacionadas