我对一件事感到好奇。我怎样才能完成当前的活动并开始另一项活动。
示例:
MainActivity
--(starts)--> LoginActivity
--(if success, starts)--> SyncActivity
--(if success start)--> MainActivity (with updated data).
所以我希望SyncActivity
在成功同步后启动MainActivity
,如果我按回按钮不返回SyncActivity
或在SynActivity
之前打开的任何其他活动。
我尝试过这段代码:
Intent intent = new Intent(Synchronization.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
this.finish();
但它无法正常工作。任何想法如何使事情正常工作?
答案 0 :(得分:50)
使用
Intent intent = new Intent(SyncActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
答案 1 :(得分:3)
从你的OP来看,我不确定你是否绝对必须初始化你的mainActivity两次..
Android的设计使得用户永远不会真正关闭应用。 专注于覆盖Android生命周期方法,如OnResume和OnPause,以保存UI数据等。
因此,您不需要明确finish()
主要活动(实际上不应该)。要从先前的活动接收登录或同步数据,只需覆盖OnActivityResult()
方法即可。但是,要执行此操作,您必须使用startActivityForResult(intent)
启动活动。因此,对于每个活动,您应该这样做:
主要活动:
static public int LOGIN_RETURN_CODE = 1;
开始登录:
Intent intent = new Intent(MainActivity.this, LogInActivity.class);
startActivityForResult(intent, LOGIN_RETURN_CODE);
收到登录信息:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case LOGIN_RETURN_CODE:
//do something with bundle attached
}
}
登录活动:
static public int SYNC_RETURN_CODE = 2;
开始同步:
Intent intent = new Intent(LogInActivity.this, SyncActivity.class);
startActivityForResult(intent,SYNC_RETURN_CODE);
收到信息并返回Main:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case MainActivity.SYNC_RETURN_CODE:
Intent intent = new Intent(...);
intent.setResult(RESULT_OK);
finish();
}
}
这可能不会全部编译,但希望你能得到这个想法。