1

我对 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}
4

2 回答 2

2

您当前的应用程序结构没有多大意义。是否SignUp也必须是一个活动?您可以使用 AlertDialog 来做类似的事情。如果它确实需要成为一个 Activity 然后让它 extend ,那么在这种情况下Activity进行扩展没有多大意义。HomeActivity

我也不喜欢加入setContentView()逻辑陈述的想法。onCreate() 仅在创建 Activity 时调用。因此,如果您启动SignUpActivity 然后按后退按钮,您的HomeActivity.

编辑:就像鲨鱼说的那样,您似乎没有办法将数据从SignUp回传到HomeActivity. 你应该尝试使用startActivityForResult()然后使用setResult()inSignUp来表示它是否成功。

于 2012-08-16T16:33:12.227 回答
1

您需要让 onCreate() 完成,然后将新 Activity 移动到 onResume() 或 onStart(); 当您的活动显示给用户而不是它仍在初始化(本身)时,这些被调用。

此外,看起来您需要设置一个

onLoginFinished(int result);

回调...尝试使用 startActivityForResult() 运行您的登录并在 onActivityResult() 中捕获结果

或者 ...

您创建自己的界面,一旦其他活动完成,它会调用 onLoginFinished(isOK) 回调,您可以在其中确定要使用的屏幕。

于 2012-08-16T16:09:14.420 回答