2010-09-14 3 views
5

ich das Beispiel hier folgende bin:TabHost setCurrentTab ruft nur oncreate Methode zur Aktivität in Tab einmal

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

Alles funktioniert gut. Wenn ich zum ersten Mal auf jede Registerkarte klicke, wird die Methode oncreate für Aktivitäten aufgerufen, die an diese bestimmte Registerkarte gebunden sind. Nachfolgende Auswahlen der Registerkarten rufen diese Oncreate-Methode jedoch nicht auf.

Ich muss oncreate (oder eine andere Methode) auf der Aktivität ausführen können, die an jede Registerkarte gebunden ist, wenn diese Registerkarte ausgewählt ist. Ich weiß, dass ich eine setOnTabChangedListener verwenden kann, aber ich bin unsicher, wie ich Zugriff auf die Aktivität bekomme, die an die Registerkarte gebunden ist, so dass ich die oncreate (oder eine andere) Methode aufrufen kann.

+2

Sie könnten Ihren Code in onResume() setzen – Falmarri

Antwort

4

Es ist eine Frage der Effizienz ... Deshalb wird Ihre Methode onCreate nicht zweimal oder öfter aufgerufen. Die eaiser Art und Weise Ihre Aktivitäten von Ihrem TabActivity durch die OnTabChangedListener zuzugreifen, ist dies:

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

Dann auf Ihrem Kind Aktivität, haben Sie so etwas wie:

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

Es ist nicht Schönheit, aber es funktioniert gut .

+0

danke - das ist perfekt! Ich fand tatsächlich, dass ich das etwas anders machen könnte, indem ich beim ersten Aufruf von der onCreate() -Methode auf den TabHost zugreifen und später eine Kopie meiner Activity für den Zugriff speichern würde. tabHost.setTag (this) Ich mag Ihre Methode jedoch besser. – Jason

+0

das funktioniert nicht für mich! – adrian

+0

Android ist lächerlich Zustandsmaschine !!! Status der Aktivitäten in Tabs verloren! Warum Android Architect Team nicht Registerkarte wie eine Aktivität mit Teilen implementieren, um verlorenen Zustand zu verhindern! – Mateus

2

Blick auf die onStart Methode in der Activity class, ich glaube, Sie wollen, dass anstelle von onCreate außer Kraft zu setzen (oder zusätzlich zu, in der Regel rufen Sie setContentView nur in onCreate)

2

eine andere Methode, die Sie aufrufen können, wenn die Verwendung TabActivity.getCurrentActivity()

0

Wie @Cristian wies darauf hin, es ist eine Frage der Effizienz. , aber Sie können stattdessen immer die Methode onResume() in Ihrer untergeordneten Aktivität verwenden.

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

} 
Verwandte Themen