Android: невозможно перезапустить ListActivity - PullRequest
1 голос
/ 23 сентября 2011

Первое сообщение, поэтому, пожалуйста, будьте спокойны.

У меня есть приложение с несколькими вкладками, первое открывается при запуске приложения.Одна из вкладок - «Моя учетная запись» (ListActivity), отображающая параметры учетной записи.Я переключаюсь на это, и если пользователь не вошел в систему, он, в свою очередь, запускает действие UserLogon, используя следующее:

Intent logonActivity = new Intent(getBaseContext(), UserLogon.class);
startActivityForResult(logonActivity, 0);

Чтобы поймать результат, я использую следующий код:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 0){
        MainBlock ta = (MainBlock) this.getParent();
        TabHost th = ta.getMyTabHost();
        th.setCurrentTab(0);
        finish();
    }
    if (requestCode == 100)
    {
        showAccountOptions();
    }
}

В классе UserLogon у меня обычный тариф;TextView и кнопки.Предполагается, что если пользователь отменит регистрацию, он вернется на начальную вкладку или, если авторизация прошла успешно, отобразятся параметры учетной записи.И это действительно то, что происходит.

Пока все хорошо.

Проблема, с которой я столкнулся, заключается в том, что если я отменю вход в систему и вернусь на первую вкладку, когда я выберу учетные записиСнова вкладка, я не представлен с активностью UserLogon.У меня сложилось впечатление, что finish() закроет действие UserLogon и действие «Учетные записи», но это не произойдет.

Итак, мой вопрос заключается в том, как я могу перезапустить действие «Учетные записи»,что пользователю будет предоставлена ​​возможность еще раз войти в систему.

1 Ответ

0 голосов
/ 23 сентября 2011

Мы хорошие люди и все готовы помочь ;-) Я сделаю это. Тем не менее, я не совсем уверен, что все в порядке.

По сути, у вас есть настроенная TabActivity, где вы делаете что-то подобное:

myTabHost.setOnTabChangedListener(new OnTabChangeListener(){
@Override
public void onTabChanged(String tabId) {
    if (tabId.equals("account") && !loggedIn) {
        Intent logonActivity = new Intent(getBaseContext(), UserLogon.class);
        startActivityForResult(logonActivity, 0);
    }
}});

Вы в основном говорите, что первый запуск Activity в UserLogon работает, а второй - нет, верно? Вы отладили до этого момента, чтобы проверить, не достиг ли вы кода, который снова запускает действие?

Обновление на основе комментария

Ваш UserLogon всегда должен предоставлять информацию о результате, вот чертеж:

public class UserLogon extends Activity {

    public void onCreate(Bundle bundle) {
        // ... do something ...

        // if activity is canceled this will be the "last" result
        setResult(RESULT_CANCELED);
    }

    public void checkLoginOrSomethingLikeThat() {
        Intent result = new Intent();
        // put your results in this intent
        setResult(RESULT_OK, intent);

        // close activity since we have the information we need
        finish();
    }
}

Родительская активность, ожидающая результата, должна делать это так:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // it's good practice to use a constant for 0 like LOGIN_REQUEST
    // otherwise you will ask yourself later "What the hell did 0 stand for?"
    if(requestCode == 0){
        if (resultCode == RESULT_OK) {
            // get needed data from data intent and react on that
        } else {
            // no success, react on that
        }
    }

    // ... I don't know what your resultCode 100 is but handle itwith the same pattern
}
...