2012-09-01 12 views
27

Jak ustawić domyślną zakładkę po utworzeniu najpierw FragmentActivity? Mam 5 kart i chcę, aby otwierały się na kartę 2, a nie 1. Wygląda na to, że powinno być o wiele łatwiej niż jest!Ustaw domyślną kartę dla konfiguracji fragmentów/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; 
     } 
    } 

A mój 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> 

Odpowiedz

76

Czy próbowałeś dzwoniąc mViewPager.setCurrentItem(tab.getPosition()); na końcu onCreate()?

+23

Wystarczająco blisko, zrobiłem 'mViewPager.setCurrentItem (1);' i to działało idealnie. – KickingLettuce

+1

@ Flynny75 nie ma związku z tym pytaniem, ale czy możesz mi powiedzieć, w jaki sposób mogę znaleźć wybraną kartę, więc mogę wykonać pewne czynności po wybraniu określonej karty –

+1

@DawoodAwan Wiem, że jest późno. Możesz wypróbować 'mViewPager.getCurrentItem()'. – Sufian

Powiązane problemy