java - Android:在 onCreate 内部启动 Intent 会导致无限循环/崩溃

标签 java android

我是 Android/java 的新手,遇到了第一个让我头疼的问题。

我正在尝试根据用户是否登录有条件地更改起始 View (我已经在此处设置了 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 也必须是 Activity 吗?您可以使用 AlertDialog 来做类似的事情。如果它确实需要成为 Activity,那么让它扩展 Activity,在此上下文中扩展 HomeActivity 没有多大意义。

我也不喜欢将 setContentView() 放在逻辑语句中的想法。 onCreate() 仅在创建 Activity 时调用。因此,如果您启动 SignUp Activity,然后按下后退按钮,您的 HomeActivity 将不会有布局。

编辑:正如 Shark 所说,您似乎无法将数据从 SignUp 传回 HomeActivity。您应该尝试使用 startActivityForResult(),然后在 SignUp 中使用 setResult() 来说明它是否成功。

关于java - Android:在 onCreate 内部启动 Intent 会导致无限循环/崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11991276/

相关文章:

java - 为什么 OpenAPI 生成带有下划线前缀的 Java 成员/方法?

java - 在 Struts 1.x JSP 中填充多个表单

java - JFrame没有关闭窗口?

android - 错误 android.os.networkonmainthreadexception asynctask getResponseCode

java - 如何在Android 9.0上通过HTTP获取图像然后裁剪图像?

android - 从网络服务读取数据、解析数据并将其插入 SQLite 数据库的推荐方式/顺序

Java 从文件中删除行

java - Spring 扩展 Authentication 对象以保持 Controller 干燥

android - 尝试在 Android 中添加帐户时出现异常

android - Nexus 7 接近传感器