Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set Default Tab for Fragment/ViewPager setup

How do you set a default tab when the FragmentActivity is first created? I have 5 tabs and want it to open to tab 2, not 1. It seems like it should be much easier than it is!

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

And my 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> 
like image 735
TheLettuceMaster Avatar asked Sep 01 '12 20:09

TheLettuceMaster


People also ask

How do you set a tab as selected?

Use this: tabs. getTabAt(index). select();

How do I set ViewPager to tabLayout?

Android ViewPager ViewPager with TabLayout A TabLayout can be used for easier navigation. You can set the tabs for each fragment in your adapter by using TabLayout. newTab() method but there is another more convenient and easier method for this task which is TabLayout. setupWithViewPager() .

What is the difference between ViewPager and ViewPager2?

ViewPager2 is an improved version of the ViewPager library that offers enhanced functionality and addresses common difficulties with using ViewPager . If your app already uses ViewPager , read this page to learn more about migrating to ViewPager2 .


1 Answers

Have you tried calling mViewPager.setCurrentItem(tab.getPosition()); at the end of onCreate()?

like image 151
Flynny75 Avatar answered Sep 21 '22 04:09

Flynny75