![](/img/trans.png)
[英]Force activity to call onCreate() using startActivity when the launchMode is singleTask
[英]launch activity twice even with launchMode="singleTask"
我有一项活动,用于显示具有两个不一致目标的游览详情
首先,该活动有一个预订按钮,该按钮重定向到银行付款并在付款成功或不成功后返回活动。这就是我在清单中设置启动模式以阻止活动重新创建的原因。
android:launchMode="singleTask"
其次,该活动有一个按钮可以重定向到类似的游览,然后我必须调用finish();
在startActivity()
之前使意图工作!
onNewIntent()
内部活动以获取第一部分的数据
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent.getData() != null) {
Helper.logDebug("fsfsfsgsgsgs", "inside get data not null");
String query = intent.getData().getQuery();
Helper.logDebug("fsfsfsgsgsgs","query is "+ query);
if (query!=null && query.contains("Status=OK")) {
if (frgBtmReserve!=null){
frgBtmReserve.dismiss();
}
String count=query.substring(16);
Helper.logDebug("fsfsfsgsgsgs","count is "+ count);
frgObjectInfo.updateReserveCount(count);
Helper.logDebug("fsfsfsgsgsgs", "inside status ok");
Helper.notifyUserDone(getResources().getString(R.string.success_tour_reserve), this,R.drawable.ic_tick);
} else {
frgBtmReserve.dismiss();
Helper.logDebug("fsfsfsgsgsgs", "inside status nok");
Helper.notifyUserWarning(getResources().getString(R.string.error_tour_reserve), this);
}
}
}
单击第二部分应该创建当前活动的新实例,但它不会因为活动的启动模式是singleTask
.intent 直到我在startActivity()
之前finish()
才起作用
Intent intent = new Intent(context, ActivityShowObject.class);
intent.putExtra(ActivityShowObject.INTENT_KEY_TYPE, Obj.TYPE_TRAVEL);
intent.putExtra(ActivityShowObject.INTENT_KEY_COLOR, color);
intent.putExtra(ActivityShowObject.INTENT_KEY_OBJ_ID, obj.getAgencyId());
((AppCompatActivity)context).finish();
startActivity(intent);
Animatoo.animateShrink(context);
这是我的问题,想想一个用户正在查看一些类似的旅行,然后按回,应用程序会回到第一步! 你们对我有什么建议吗?
摆脱
android:launchMode="singleTask"
作为一个开始。 我认为这是错误的用例,让你更难。
你有两种情况:
#2 使用正常的startActivity
路由,这将允许正常的后退导航
对于#1,您也可以使用普通的startActivity
但我有一种感觉,当他们成功付款时,您不希望他们按回车返回游览,但是如果他们付款不成功,您确实希望让他们返回?
如果是这种情况,您可以在导航到#1 支付方案时使用startActivityForResult
。
当他们完成付款成功调用
setResult(RESULT_OK)
如果他们不成功
setResult(RESULT_CANCELLED)
然后当他们回击时,结果被传播到第一个活动,您可以使用它来调用或不调用finish()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.