2011-05-30 72 views
1

我有一個Android應用程序,我用它來在我的網站上註冊用戶。我的第一個任務是註冊一個用戶,如果我的共享首選項文件顯示沒有註冊用戶信息。Android共享偏好條件活動切換

如果我的應用程序有一個註冊用戶,我提供了下面的代碼簡單,並自動切換到「主頁」活動:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.signin); 

     if(USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, "") == null && USERPREFERENCES.getString(USERPREFERENCES_USERID, "") == null && USERPREFERENCES.getString(USERPREFERENCES_USERNAME, "") == null){ 
      //setContentView(R.layout.signin); 
      Toast.makeText(SignIn.this, "testing...", Toast.LENGTH_LONG).show(); 
     }else{ 
      Intent intent = new Intent(SignIn.this, Confirmed.class); 
      startActivity(intent); 
     } 
... other code 

所以,從我的默認行爲,signin.java,應用程序將要麼切換到已確認的活動,要麼保持並顯示登錄活動。

我的問題是,當系統的工作原理和我切換到已確認的活動,我提供了一個退出的onclick監聽器,低於:

signout.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //USERPREFERENCES.cl 
       Toast.makeText(Confirmed.this, "signout responding!", Toast.LENGTH_LONG).show(); 
       USERPREFERENCES.edit().clear().commit(); 
      } 
     }); 

它響應,並清除所有我的共享偏好變量。但是,當我使用我的菜單手動切換到登錄活動時,我仍然會切換回已確認的活動。

即使我可以確認變量是空的,也會發生這種情況。

我希望這可以讓一些誰可以給我一些幫助。謝謝。

回答

2

這幾乎永遠不會是真實的:

USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, "") == null 

如果你使用這個什麼呢?

if(USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, null) == null && USERPREFERENCES.getString(USERPREFERENCES_USERID, null) == null && USERPREFERENCES.getString(USERPREFERENCES_USERNAME, null) == null){ 
    //setContentView(R.layout.signin); TRY TO AVOID DOING THIS THING!!!!! 
    Toast.makeText(SignIn.this, "testing...", Toast.LENGTH_LONG).show(); 
}else... 

此外,作爲推薦...而不是活動...如果你創建只是一個Signing.java活動,把一個ViewFlipper在其佈局什麼之間切換。這樣你的應用不僅會更快,而且更容易維護。

+0

咦,對了「」!= NULL良好的漁獲物。我想知道最初它是如何爲他工作的。 – dmon 2011-05-30 15:56:48

+0

謝謝你們兩個 - 特別是基督徒。您的輸入幫助我瞭解我哪裏錯了。而且,我也會查看ViewFlipper 備受讚賞! – sisko 2011-05-30 19:01:24

1

如果您導航回第一個活動,則不會再次調用onCreate(除非活動因缺乏資源而被破壞)。將驗證碼移至onResume

+0

謝謝。我需要更多的生命週期知識。再次感謝 – sisko 2011-05-30 19:12:14

2

這是因爲當您切換回LoginActivity時,將會恢復而不是被創建,意味着您寫入inOnCreate的Login代碼將不會被調用,因爲已調用此次Overrider OnResume,而不是onCreate。

因此,要麼再次的onResume移動到第二活動前編寫代碼或調用finish(),這樣下次就會調用的onCreate()

+0

謝謝,我需要閱讀android應用程序生命週期 – sisko 2011-05-30 19:11:19