2011-09-22 93 views
1

第一篇文章,所以请放轻松。Android:无法重新启动ListActivity

我有一个应用程序与少数选项卡,第一次打开运行应用程序。 其中一个选项卡是显示帐户选项的“我的帐户”(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()将关闭用户登录活动和帐户活动,但它不会显示。

所以,我的问题很简单,实际上,我如何重新启动Accounts活动,以便用户可以再次登录该选项。

回答

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的第一个活动开始工作,但第二个不是,请右键?你有没有调试到这一点来检查你是否达到了再次启动活动的代码?

更新基于评论

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

非常感谢您的迅速回复,让我更接近我的目标。 我现在已经添加了setOnTabChangedListener,它现在在选择Account选项卡时触发UserLogon活动。但是,单击取消按钮时,出现以下错误: java.lang.RuntimeException:传递结果失败ResultInfo {who = null,request = 0,result = 0,data = Intent {(has extras )}}到活动{com.app.myApp/com.app.myApp.MainBlock}:java.lang.NullPointerException 任何想法? –

+0

要添加,我的MainBlock也有OnActivityResult,并且UserLogon活动调用setResult。 –

+0

我更新了答案,以便您可以看到如何使用活动结果的想法。也许这会帮助你弄清楚发生了什么问题。 – Knickedi