TabHost setCurrentTab вызывает метод oncreate для действия на вкладке только один раз

Я следую примеру здесь:

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

Все работает нормально. В первый раз, когда я нажимаю на каждую вкладку, вызывается метод oncreate для действия, связанного с этой конкретной вкладкой. Однако последующие выборы вкладок не вызывают этот метод oncreate.

Мне нужно иметь возможность выполнять oncreate (или другой метод) в действии, привязанном к каждой вкладке, когда эта вкладка выбрана. Я знаю, что могу использовать setOnTabChangedListener, но я не уверен, как получить доступ к Activity, привязанному к вкладке, чтобы я мог вызвать метод oncreate (или другой).


person Jason    schedule 14.09.2010    source источник
comment
Вы можете поместить свой код в onResume()   -  person Falmarri    schedule 14.09.2010


Ответы (4)


Это вопрос эффективности... поэтому ваш метод onCreate не вызывается дважды или более раз. Более простой способ получить доступ к вашей активности с вашего TabActivity через OnTabChangedListener таков:

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

Затем в вашей дочерней активности у вас есть что-то вроде:

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

Это не красота, но работает нормально.

person Cristian    schedule 14.09.2010
comment
спасибо - это идеально! На самом деле я обнаружил, что могу сделать это немного по-другому, получив доступ к TabHost из метода onCreate() при первом его вызове и сохранив копию своей Activity для последующего доступа. tabHost.setTag(this) Мне больше нравится ваш метод. - person Jason; 14.09.2010
comment
андроид это нелепый конечный автомат!!! пропало состояние активности во вкладках! почему команда архитекторов Android не реализует вкладку, такую ​​​​как ОДНА активность с частями, чтобы предотвратить потерю состояния! - person Mateus; 22.04.2013

Посмотрите на метод onStart в классе Activity. желая переопределить это вместо onCreate (или в дополнение, обычно вы вызываете setContentView только в onCreate)

person Hamy    schedule 14.09.2010

другой метод, который вы можете вызвать, если используете TabActivity.getCurrentActivity()

person alex    schedule 19.03.2011

Как отметил @Cristian, это вопрос эффективности. но вместо этого вы всегда можете использовать метод onResume() в своей дочерней активности.

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

}
person TomerBu    schedule 25.02.2014