Android:无法重新启动ListActivity

时间:2011-09-22 22:10:03

标签: android android-activity restart

第一篇文章,请放心。

我有一个带有少量标签的应用,第一个是在运行应用时打开的。 其中一个标签是“我的帐户”(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和Button的。目的是如果用户取消登录,它将恢复到初始选项卡,或者如果登录成功,它将显示帐户选项。这确实发生了什么。

到目前为止一切都很好。

我遇到的问题是,如果我取消登录并返回第一个标签,当我再次选择“帐户”标签时,我没有看到UserLogon活动。我的印象是finish()将关闭UserLogon活动和Accounts活动,但它看起来不会。

所以,我的问题很简单,我如何实际重启帐户活动,以便为用户提供再次登录的选项。

1 个答案:

答案 0 :(得分:0)

我们是好人,都愿意帮忙;-)我会试一试。不过,我不太确定我能做到这一点。

基本上你有一个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);
    }
}});

你基本上是说UserLogon的第一个Activity开始工作,但第二个没有,对吧?您是否已调试到该点以检查是否到达了再次启动活动的代码?

根据评论进行更新

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