with viewpager studio fragments example activity android android-fragments actionbarsherlock android-viewpager android-tabs

viewpager - tabs android material design



Android Action Sherlock Sherlock con pestaƱas (2)

Implementé esta funcionalidad con un SherlockFragmentActivity como contenedor de pestañas y con SherlockFragment como pestañas. Aquí hay un boceto (omití la actividad usual de Android):

Esta es la actividad de tabview con dos pestañas:

public class TabViewActivity extends SherlockFragmentActivity { // store the active tab here public static String ACTIVE_TAB = "activeTab"; @Override public void onCreate(Bundle savedInstanceState) { .. final ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // add the first tab which is an instance of TabFragment1 Tab tab1 = actionBar.newTab() .setText("TabTitle1") .setTabListener(new TabListener<TabFragment1>( this, "tab1", TabFragment1.class)); actionBar.addTab(tab1); // add the second tab which is an instance of TabFragment2 Tab tab2 = actionBar.newTab() .setText("TabTitle2") .setTabListener(new TabListener<TabFragment2>( this, "tab2", TabFragment2.class)); actionBar.addTab(tab2); // check if there is a saved state to select active tab if( savedInstanceState != null ){ getSupportActionBar().setSelectedNavigationItem( savedInstanceState.getInt(ACTIVE_TAB)); } } @Override protected void onSaveInstanceState(Bundle outState) { // save active tab outState.putInt(ACTIVE_TAB, getSupportActionBar().getSelectedNavigationIndex()); super.onSaveInstanceState(outState); } }

Y este es el TabFragment que contiene el contenido de una pestaña:

public class TabFragment extends SherlockFragment { // your member variables here @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_va_esh, container, false); ... // do your view initialization here return view; } }

Y finalmente este es el TabListener que maneja los conmutadores de pestañas:

public class TabListener<T extends Fragment> implements ActionBar.TabListener{ private TabFragment mFragment; private final Activity mActivity; private final String mTag; private final Class<T> mClass; public TabListener(Activity activity, String tag, Class<T> clz) { mActivity = activity; mTag = tag; mClass = clz; } public void onTabSelected(Tab tab, FragmentTransaction ft) { // Check if the fragment is already initialized if (mFragment == null) { // If not, instantiate and add it to the activity mFragment = (TabFragment) Fragment.instantiate( mActivity, mClass.getName()); mFragment.setProviderId(mTag); // id for event provider ft.add(android.R.id.content, mFragment, mTag); } else { // If it exists, simply attach it in order to show it ft.attach(mFragment); } } public void onTabUnselected(Tab tab, FragmentTransaction ft) { if (mFragment != null) { // Detach the fragment, because another one is being attached ft.detach(mFragment); } } public void onTabReselected(Tab tab, FragmentTransaction ft) { // User selected the already selected tab. Usually do nothing. } }

Estoy tratando de implementar ActionBar Sherlock con pestañas debajo de eso, como se muestra en el cuadro de cables anterior.

¿Debería usar TabActivity? - desde que vi que está en desuso. Cuál es la mejor manera de lograr lo mismo.


Creo que TabActivity está en desuso en favor del uso de Fragmentos, no porque la navegación con pestañas sea un concepto en desuso. Simplemente use Fragments y un TabWidget.

Además, aquí hay una pregunta similar .

Editar:

Aquí hay un ejemplo cortesía de Google: Android Tabs the Fragment Way