簡體   English   中英

Android:在onCreate中啟動一個intent會導致無限循環/崩潰

[英]Android: Starting an intent inside of onCreate is causing an infinite loop / crash

我對Android / java很陌生,並且遇到了我的第一個頭腦。

我試圖根據用戶是否已登錄有條件地更改起始視圖(我已經設置了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);
    }

    // ...
}

** * ** 截斷下面的堆棧跟蹤 ** * **** (adb 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}

您當前的應用程序結構沒有多大意義。 SignUp也必須是一個活動嗎? 您可以使用AlertDialog執行類似的操作。 如果它確實需要是一個Activity然后讓它擴展Activity ,那么在這個上下文中擴展HomeActivity沒有多大意義。

我也不喜歡將setContentView()放在邏輯語句中。 onCreate()僅在創建Activity時調用。 因此,如果您啟動SignUp Activity然后按后退按鈕,則不會有HomeActivity的布局。

編輯:和Shark一樣,看起來你沒有辦法將數據從SignUp傳回HomeActivity 您應該嘗試使用startActivityForResult()然后在SignUp使用setResult()來說明它是否成功。

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

此外,看起來你需要設置一個

onLoginFinished(int result);

回調...嘗試使用startActivityForResult()運行登錄並在onActivityResult()中捕獲結果

要么 ...

您創建自己的界面,一旦其他活動完成,它將調用onLoginFinished(isOK)回調,您可以在其中確定要使用的屏幕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM