2011-09-22 92 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