Contenido de la pestaña usando el estilo de la pestaña actionbarsherlock

Refiriéndose a este código a continuación (tomado de https://gist.github.com/1126843 ) ¿cómo puedo establecer el contenido de las pestañas?

public class NativeTabActivity extends Activity { private TabHost mTabHost; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTabHost = (TabHost)findViewById(android.R.id.tabhost); mTabHost.setup(); addTab(new TextView(this), "Tab 1"); addTab(new TextView(this), "Tab 2"); addTab(new TextView(this), "Tab 3"); } private void addTab(final View content, final String title) { View tabView = LayoutInflater.from(this).inflate(R.layout.abs__action_bar_tab_layout, null); TextView tv = (TextView) tabView.findViewById(R.id.abs__tab); tv.setText(title); TabSpec setContent = mTabHost.newTabSpec(title).setIndicator(tabView).setContent(new TabContentFactory() { public View createTabContent(String tag) { return content; } }); mTabHost.addTab(setContent); } } 

Desde el código, parece que tengo que poner el contenido bajo la vista createTabContent (String tag), pero ¿cómo lo hago?

Utilizo Fragmentos para mi implementación de Sherlock.

 public class ActionBarTabs extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar bar = getSupportActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); bar.addTab(bar.newTab() .setText("Home") .setTabListener(new TabListener<DashBoardFragment>( this, "home", DashBoardFragment.class, null))); bar.addTab(bar.newTab() .setText("Inventory") .setTabListener(new TabListener<InventoryFragment>( this, "inventory", InventoryFragment.class, null))); if (savedInstanceState != null) { bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0)); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // app icon in action bar clicked; go Location selection Intent intent = new Intent(ActionBarTabs.this, LocationSelectorActivity.class); ActionBarTabs.this.startActivityForResult(intent,0); return true; default: return super.onOptionsItemSelected(item); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("tab", getSupportActionBar().getSelectedNavigationIndex()); } public class TabListener<T extends Fragment> implements ActionBar.TabListener { private final FragmentActivity mActivity; private final String mTag; private final Class<T> mClass; private final Bundle mArgs; private Fragment mFragment; public TabListener(FragmentActivity activity, String tag, Class<T> clz, Bundle args) { mActivity = activity; mTag = tag; mClass = clz; mArgs = args; FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); // Check to see if we already have a fragment for this tab, probably // from a previously saved state. If so, deactivate it, because our // initial state is that a tab isn't shown. mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag); if (mFragment != null && !mFragment.isDetached()) { ft.detach(mFragment); } } @Override public void onTabSelected(Tab tab) { FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); if (mFragment == null) { mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs); ft.add(android.R.id.content, mFragment, mTag); ft.commit(); } else { ft.attach(mFragment); ft.commit(); } } @Override public void onTabUnselected(Tab tab) { FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); if (mFragment != null) { ft.detach(mFragment); ft.commitAllowingStateLoss(); } } @Override public void onTabReselected(Tab tab) { } } } 

El cambio clave para cargar fragmentos diferentes en las pestañas es simplemente cambiar "YOUR_FRAGMENT_NAME" al nombre de la clase de fragmento en estas líneas:

 bar.addTab(bar.newTab() .setText("Home") .setTabListener(new TabListener<YOUR_FRAGMENT_NAME>( this, "home", YOUR_FRAGMENT_NAME.class, null))); 

¡Espero que esto ayude!

He encontrado la respuesta de Rymnel muy útil, pero tuve que hacer algunos cambios para que funcione correctamente con ActionBarSherlock 4.0. Yo estaba teniendo problemas con la sustitución de los métodos onTab pasando en FragmentTransactions, por lo que sólo utiliza los métodos predeterminados y reasignado el "ft" var dentro del método. Estoy seguro de que hay una manera más limpia de hacer esto, pero aquí está mi código de trabajo:

 public class TabTestActivity extends SherlockFragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar bar = getSupportActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); bar.setDisplayHomeAsUpEnabled(true); bar.setDisplayShowTitleEnabled(true); bar.setTitle("Activity Title"); bar.addTab(bar .newTab() .setText("Tab 1") .setTabListener( new TabListener<TabTest1>(this, "tab1", TabTest1.class, null))); bar.addTab(bar .newTab() .setText("Tab 2") .setTabListener( new TabListener<TabTest2>(this, "tab2", TabTest2.class, null))); bar.addTab(bar .newTab() .setText("Tab 3") .setTabListener(new TabListener<TabTest3>(this, "tab3", TabTest3.class, null))); if (savedInstanceState != null) { bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0)); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // app icon in action bar clicked; go home Intent intent = new Intent(this, DashboardActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); return true; default: return super.onOptionsItemSelected(item); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("tab", getSupportActionBar() .getSelectedNavigationIndex()); } public class TabListener<T extends Fragment> implements ActionBar.TabListener { private final FragmentActivity mActivity; private final String mTag; private final Class<T> mClass; private final Bundle mArgs; private Fragment mFragment; public TabListener(FragmentActivity activity, String tag, Class<T> clz, Bundle args) { mActivity = activity; mTag = tag; mClass = clz; mArgs = args; FragmentTransaction ft = mActivity.getSupportFragmentManager() .beginTransaction(); // Check to see if we already have a fragment for this tab, probably // from a previously saved state. If so, deactivate it, because our // initial state is that a tab isn't shown. mFragment = mActivity.getSupportFragmentManager() .findFragmentByTag(mTag); if (mFragment != null && !mFragment.isDetached()) { ft.detach(mFragment); } } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { ft = mActivity.getSupportFragmentManager() .beginTransaction(); if (mFragment == null) { mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs); ft.add(android.R.id.content, mFragment, mTag); ft.commit(); } else { ft.attach(mFragment); ft.commit(); } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { ft = mActivity.getSupportFragmentManager() .beginTransaction(); if (mFragment != null) { ft.detach(mFragment); ft.commitAllowingStateLoss(); } } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } } 
  • ¿Cómo puedo reutilizar una instancia de fragmentos de Android en diferentes fragmentos?
  • Cómo cambiar la pestaña ActionBarSherlock ¿Color de texto?
  • ¿Cómo agregar la biblioteca de ActionBarSherlock al proyecto?
  • Anulación de onOptionsItemSelected from SherlockFragmentActivity
  • Set contentDescription para el botón de ActionBar arriba
  • SherlockFragmentActivity setSupportProgressBarIndeterminateVisibility no funciona
  • El teclado flexible de Android no se mostrará en 2.2 / 2.3, pero sí en 3.0+
  • No se puede resolver la superclase de Landroid / support / v4 / app / FragmentActivity
  • Cómo importar ejemplos de Actionbarsherlock en eclips y usarlos
  • No puede ejecutar ActionBarSherlock
  • No se encontró ningún recurso que coincida con el nombre dado Theme.Sherlock.Dialog
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.