2010-09-14 7 views
5

Sto seguendo l'esempio qui:TabHost setCurrentTab chiama unico metodo OnCreate per attività in Tab una volta

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

tutto funziona bene. La prima volta che faccio clic su ogni scheda, viene chiamato il metodo oncreate per l'attività associata a quella specifica scheda. Tuttavia, le selezioni successive delle schede non chiamano questo metodo oncreate.

Devo essere in grado di eseguire oncreate (o un altro metodo) sull'attività associata a ciascuna scheda, quando tale scheda è selezionata. So che posso usare un setOnTabChangedListener, ma non sono sicuro di come accedere all'attività associata alla scheda, in modo che possa chiamare il metodo oncreate (o un altro).

+2

È possibile inserire il proprio codice onResume() – Falmarri

risposta

4

E 'una questione di efficienza ... è per questo che il tuo metodo onCreate non viene chiamato due o più volte. Il modo eaiser per accedere alla tua attività dal tuo TabActivity attraverso il OnTabChangedListener è questo:

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(); 
       } 
      } 
     }); 
    } 
} 

Poi, sulla vostra attività del bambino, hai qualcosa di simile:

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

Non è la bellezza, ma funziona benissimo .

+0

grazie - è perfetto! In realtà ho scoperto che avrei potuto farlo in un modo leggermente diverso accedendo al TabHost dal metodo onCreate() la prima volta che viene chiamato e memorizzando una copia della mia attività per l'accesso in un secondo momento. tabHost.setTag (this) Mi piace il tuo metodo meglio, però. – Jason

+0

questo non funziona per me! – adrian

+0

android è ridicolo macchina di stato !!! stato perduto di attività in schede! perché il team di architetti Android non implementa la scheda come un'attività con le parti, per prevenire lo stato di perdita! – Mateus

2

Guarda il metodo onStart nel Activity class, penso che si vogliono ignorare che invece di onCreate (o in aggiunta a, di solito si chiama setContentView solo in onCreate)

2

un altro metodo è possibile chiamare se l'uso TabActivity.getCurrentActivity()

0

Come sottolineato da @Cristian, è una questione di efficienza. ma puoi sempre utilizzare il metodo onResume() nell'attività figlio.

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

} 
Problemi correlati