2010-03-12 11 views
5

Tengo una TabActivity. Cada pestaña apunta a una subactividad. Esto funciona genial¿Reiniciar una actividad en una sola pestaña en una TabActivity?

¿Hay alguna manera inteligente de actualizar una de las pestañas de actividad? Solo quiero 'reiniciar' la actividad en la pestaña # 3, por ejemplo. No estoy seguro de una buena manera de hacer esto que no sea la creación de soporte de actualización para la actividad en sí, o la eliminación de TODAS las pestañas y la recreación de todas ellas.

Gracias,

Respuesta

4

no han probado esto por mí mismo, pero por lo general que el acceso de cada individuo pestaña Activity utilizando el LocalActivityManager. Esto se puede recuperar en TabActivity usando getLocalActivityManager().

Parece que debería poder usar destroyActivity() y startActivity() para reiniciar una Actividad, aunque no estoy exactamente seguro de si esto funcionará (ya que yo no lo hice). Una cosa importante a tener en cuenta es que el id de la Actividad será equivalente a la etiqueta que establezca para la pestaña (por ejemplo, la Cadena que proporcionó al TabHost.newTabSpec(String)).

LocalActivityManager manager = getLocalActivityManager(); 
manager.destroyActivity("tab3", true); 
manager.startActivity("tab3", new Intent(this, ThirdTab.class)); 
+0

Awesome gracias Daniel, voy a intentarlo! – user246114

+0

Esto genera una 'NullPointerException' para mí en' android.widget.TabHost.setCurrentTab() 'línea 328. –

1

Aquí está la solución:

tabHost.setOnTabChangedListener(this); 
public void onTabChanged(String tabId) { 
     Log.d(LOG_KEY, tabId); 
     LocalActivityManager manager = getLocalActivityManager(); 
     manager.destroyActivity("ID_1", true); 
     manager.startActivity("ID_1", new Intent(this, YourMyActivity.class)); 
    } 
6

solución ligeramente más dinámico:

LocalActivityManager manager = getLocalActivityManager(); 
String currentTag = tabHost.getCurrentTabTag(); 
Class<? extends Activity> currentClass = manager.getCurrentActivity().getClass(); 
manager.destroyActivity(currentTag, true); 
manager.startActivity(currentTag, new Intent(this, currentClass)); 
+0

LocalActivityManager está en desuso. – Euthyphro

+0

Gracias Euthyphro. Esto fue escrito hace un año y medio. ¿Alguien ya dio una mejor respuesta? ¿Si es así, Cuál? – juicedM3

4

Se puede reiniciar la actividad mediante el establecimiento de bandera. El código es el siguiente.

spec = tabHost .newTabSpec("tab1") 
       .setIndicator("FirstActivity") 
       .setContent(new Intent(this,MyFirstActivity.class) 
       .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
tabHost.addTab(spec); 
Cuestiones relacionadas