TabHost setCurrentTab только один раз вызывает метод oncreate для Activity в Tab - PullRequest
5 голосов
/ 14 сентября 2010

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 14 сентября 2010

Это вопрос эффективности ... вот почему ваш метод onCreate не вызывается дважды или более раз.Eaiser способ получить доступ к вашей активности от 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
    }
}

Это не красота, но она отлично работает.

2 голосов
/ 19 марта 2011

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

2 голосов
/ 14 сентября 2010

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

1 голос
/ 25 февраля 2014

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

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...