繁体   English   中英

即使使用 launchMode="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"

作为一个开始。 我认为这是错误的用例,让你更难。

你有两种情况:

  • 1) 本次旅行的新活动费用
  • 2) 新活动 浏览另一个旅游

#2 使用正常的startActivity路由,这将允许正常的后退导航

对于#1,您也可以使用普通的startActivity但我有一种感觉,当他们成功付款时,您不希望他们按回车返回游览,但是如果他们付款不成功,您确实希望让他们返回?

如果是这种情况,您可以在导航到#1 支付方案时使用startActivityForResult

当他们完成付款成功调用

setResult(RESULT_OK)

如果他们不成功

setResult(RESULT_CANCELLED)

然后当他们回击时,结果被传播到第一个活动,您可以使用它来调用或不调用finish()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM