2012-08-16 40 views
1

我對Android/java很新穎,並且遇到了我的第一個頭疼的人。Android:在onCreate裏面啓動一個intent導致無限循環/崩潰

我想有條件改變,如果用戶在(我已經設置is_logged_in已經,這裏,更簡單地說明問題)記錄的基礎上,開始視圖。

非常感謝。

public class MainActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     boolean is_logged_in = false; 

     if(is_logged_in) { 
      setContentView(R.layout.activity_main); 
     } else { 
      menu_sign_up(); // How would I pass the View? 
     } 
    } 

    // Doesn't work, at least when called inside of MainActivity's onCreate 
    public void menu_sign_up(/* View view */) { 
     Intent intent = new Intent(this, SignUp.class); 
     startActivity(intent); 
    } 

    // Example of a working method, at least when called from android:onClick in XML 
    public void menu_sign_in(View view) { 
     Intent intent = new Intent(this, SignIn.class); 
     startActivity(intent); 
     overridePendingTransition(0,0); 
    } 
} 

public class SignUp extends MainActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sign_up); 
    } 

    // ... 
} 

** * ** 截斷堆棧跟蹤下面 ** * ****(亞行logcat *:W)

W/ActivityManager(19583): Activity idle timeout for HistoryRecord{40953fd8 com.example.digitalkarmaeclipse/.SignUp} 
W/ActivityManager(): Activity idle timeout for HistoryRecord{} 
W/ActivityManager(21900): Launch timeout has expired, giving up wake lock! 
W/ActivityManager(21900): Activity idle timeout for HistoryRecord{40a23580 com.example.digitalkarmaeclipse/.MainActivity} 
W/ActivityManager(21900): Activity idle timeout for HistoryRecord{40a2c6f8 com.example.digitalkarmaeclipse/.SignUp} 
W/ActivityManager(21900): Activity idle timeout for HistoryRecord{40a30100 com.example.digitalkarmaeclipse/.SignUp} 
W/ActivityManager(21900): Activity idle timeout for HistoryRecord{40a338e8 com.example.digitalkarmaeclipse/.SignUp} 
W/ActivityManager(21900): Activity idle timeout for HistoryRecord{40a376e0 com.example.digitalkarmaeclipse/.SignUp} 
+0

除了使用意向的,在其他部分的內容視圖設置爲特定註冊XML文件 – 2012-08-16 16:07:24

+0

我嘗試過這一點,但我想改用我使用的類從方法。 (在這種情況下,SignUp.java)。 – 2012-08-16 16:10:52

回答

2

您目前的應用程序結構沒有多大意義。 SignUp也必須是一個活動?你可以使用AlertDialog來做類似的事情。如果它確實需要是一個活動,那麼它將擴展爲Activity,但在這種情況下擴展HomeActivity沒有多大意義。

我也不喜歡把setContentView()在邏輯語句的想法。 onCreate()僅在創建Activity時調用。因此,如果您開始SignUp活動,然後按下後退按鈕,則不會爲您的HomeActivity設置佈局。

編輯:就像鯊魚說,它看起來並不像你有一種方法,將數據從SignUp傳回HomeActivity。您應該嘗試使用startActivityForResult(),然後在SignUp中使用setResult()來說明它是否成功。

+0

我還打算寫setContentView。這應該不是有條件的。也許將主佈局設置爲View.GONE默認情況下,然後有條件地顯示/ OnResume更有​​意義。但是+1因爲孩子活動延長了父母活動的陌生性。 – Roloc 2012-08-16 16:36:10

+0

是的。我假設OP只是想要一個屏幕彈出並提示用戶註冊,如果他們沒有。應該肯定還有一個基本的佈局,因爲如果用戶退出註冊,那麼應用程序將處於一種奇怪的狀態。 – 2012-08-16 16:39:45

+0

是的,看到我對鯊魚的評論回答...這對我來說是一個無限循環。它只是沒有得到那麼遠,因爲喚醒鎖,這...感謝上帝:) – Roloc 2012-08-16 16:41:39

1

你需要讓onCreate()完成,然後將新的Activity移動到onResume()或onStart();那些被調用的活動會顯示給用戶,而不是它正在初始化(本身)。

此外,它看起來像你需要建立一個

onLoginFinished(int result); 

回調...要麼嘗試運行與startActivityForResult登錄()和追趕在onActivityResult()的結果

OR .. 。

你讓你自己的界面,一旦其他活動結束它,它會調用,你確定要使用的屏幕onLoginFinished(ISOK)回調。

+0

+1準確!作爲第三個選項,您可以運行顯示對話框的AsyncTask,檢查登錄狀態,然後重定向到註冊頁面或顯示主佈局。 – Roloc 2012-08-16 16:33:33

+0

不知何故,我不認爲這對他會很清楚。看看發佈的代碼,看看logcat ...我沒有看到Log.wtf()的痕跡。 – Shark 2012-08-16 16:36:32

+1

呀在所有誠實它看起來像一個無限循環,我... MainActivity將始終啓動註冊這就要求Super.OnCreate這是MainActivity ...這將始終啓動註冊... :) – Roloc 2012-08-16 16:40:14