2010-09-14 16 views
5

estoy siguiendo el ejemplo aquí:TabHost setCurrentTab sólo se llama al método alcrear para la actividad en la Tab vez

http://developer.android.com/resources/tutorials/views/hello-tabwidget.html

Todo funciona bien. La primera vez que hago clic en cada pestaña, se llama al método oncreate para la Actividad vinculada a esa pestaña en particular. Sin embargo, las selecciones posteriores de las pestañas no llaman a este método oncreate.

Necesito ser capaz de ejecutar oncreate (u otro método) en la actividad que está vinculada a cada pestaña, cuando se selecciona esa pestaña. Sé que puedo usar un setOnTabChangedListener, pero no estoy seguro de cómo acceder a la Actividad que está vinculada a la pestaña, para poder llamar al método oncreate (u otro).

+2

Puedes poner tu código en Repetir() – Falmarri

Respuesta

4

Es una cuestión de eficiencia ... es por eso que su método onCreate no se llama dos o más veces. La forma eaiser para acceder a su actividad desde su TabActivity a través de la OnTabChangedListener es la siguiente:

public class YourTabActivity extends TabActivity{ 
    public void onCreate(Bundle InSavedInstanceState) { 
     super.onCreate(InSavedInstanceState); 
     final TabHost tabHost = getTabHost(); 

     // blablabla 

     tabHost.setOnTabChangedListener(new OnTabChangeListener() { 
      public void onTabChanged(String tabId) { 
       if(tabId.equals("the_id_of_your_tab")){ 
        NameOfThatActivity.self.theMethodYouWantToCall(); 
       } 
      } 
     }); 
    } 
} 

Luego, en su actividad de niño, usted tiene algo así como:

public class NameOfThatActivity extends Activity{ 

    public static NameOfThatActivity self; 

    // blah blah blah 
    public onCreate(Bundle b){ 
     super.onCreate(b); 
     self = this; 
    } 

    public void theMethodYouWantToCall(){ 
     // do what ever you want here 
    } 
} 

No es belleza, pero funciona bien .

+0

gracias - ¡eso es perfecto! De hecho, descubrí que podía hacer esto de una manera ligeramente diferente al obtener acceso a TabHost desde el método onCreate() la primera vez que se llama y al almacenar una copia de mi actividad para acceder más tarde. tabHost.setTag (this) Me gusta más tu método, sin embargo. – Jason

+0

esto no funciona para mí! – adrian

+0

¡android es una máquina de estado ridícula! ¡perdió el estado de las actividades en pestañas! ¿Por qué el equipo de arquitectos de Android no implementa pestañas como UNA actividad con piezas para evitar el estado perdido? – Mateus

2

Mira el método onStart en el Activity class, creo que están queriendo anular que en lugar de onCreate (o además de, por lo general se llama setContentView sólo en onCreate)

2

otro método que puede llamar si el uso TabActivity.getCurrentActivity()

0

Como se señaló por @Cristian, es una cuestión de eficiencia. pero en su lugar siempre puede usar el método onResume() en su actividad secundaria.

@Override 
protected void onResume() { 
    super.onResume();    
    // do work 

} 
Cuestiones relacionadas