我对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}
答案 0 :(得分:2)
您当前的应用结构没有多大意义。 SignUp
也必须是一个活动吗?您可以使用AlertDialog执行类似的操作。如果它确实需要是一个Activity,那么让它扩展Activity
,在这种情况下扩展HomeActivity
没有多大意义。
我也不喜欢将setContentView()
置于逻辑语句中的想法。 onCreate()仅在创建Activity时调用。因此,如果您开始SignUp
活动,然后按后退按钮,则HomeActivity
将不会有布局。
编辑:和Shark一样,看起来你似乎无法将SignUp
的数据传回HomeActivity
。您应该尝试使用startActivityForResult()
,然后在setResult()
中使用SignUp
来说明它是否成功。
答案 1 :(得分:1)
你需要让onCreate()完成,然后将你的新Activity移动到onResume()或onStart();那些被调用,因为你的活动是向用户显示的,而不是它仍在初始化(本身)。
此外,您似乎需要设置
onLoginFinished(int result);
回调...尝试使用startActivityForResult()运行登录并在onActivityResult()中捕获结果
或......
您创建自己的界面,一旦其他活动完成,它会调用onLoginFinished(isOK)回调,您可以在其中确定要使用的界面。