TabHost setCurrentTab只在Tab中调用Activity的oncreate方法一次

时间:2010-09-14 15:10:27

标签: android tabs

我在这里关注这个例子:

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

一切正常。第一次单击每个选项卡时,将调用绑定到该特定选项卡的Activity的oncreate方法。但是,后续选项卡的选项不会调用此oncreate方法。

当选择该选项卡时,我需要能够在绑定到每个选项卡的Activity上执行oncreate(或其他方法)。我知道我可以使用setOnTabChangedListener,但我不确定如何访问绑定到选项卡的Activity,以便我可以调用oncreate(或其他)方法。

4 个答案:

答案 0 :(得分:4)

这是效率的问题......这就是为什么你的onCreate方法没有被调用两次或更多次的原因。从TabActivityOnTabChangedListener访问您活动的eaiser方式是:

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

这不是美,但它运作良好。

答案 1 :(得分:2)

查看Activity class中的onStart方法,我认为你想覆盖它而不是onCreate(或者除此之外,通常只在onCreate中调用setContentView)

答案 2 :(得分:2)

使用TabActivity.getCurrentActivity()

时可以调用的另一种方法

答案 3 :(得分:1)

正如@Cristian指出的那样,这是一个效率问题。 但您总是可以在子活动中使用onResume()方法。

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

}