有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java启动活动两次,即使使用launchMode=“singleTask”

我有一个活动,展示两个目标不一致的旅游细节

首先 该活动有一个预订按钮,可重定向至银行支付,并在支付成功或失败后返回活动。这就是为什么我在清单中设置启动模式来阻止活动重新创建

安卓:launchMode="singleTask"

该活动有一个按钮,可以重定向到类似的巡演,然后我必须在startActivity()之前调用finish();使意图生效

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);
        }
    }
}

点击第二部分,该部分应创建当前活动的新实例,但由于活动的启动模式为^{,因此不会创建。意图只有在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);

这是我的问题 想象一个用户正在观看一些类似的旅行,然后按back,应用程序返回到第一步!你们有什么建议吗


共 (1) 个答案

  1. # 1 楼答案

    除掉

    android:launchMode="singleTask"

    首先。我认为这是一个错误的用例,让你更加困难

    有两种情况:

    • 1) 新活动为这次旅行付费
    • 2) 新活动浏览其他旅游

    对于#2,使用正常的startActivity路线,这将允许正常的反向导航

    对于#1,你也可以使用普通的startActivity,但我有一种感觉,当他们成功付款时,你不希望他们按back键返回巡演,但如果他们付款失败,你是否希望允许他们返回

    如果是这种情况,你可以在导航到#1支付场景时使用startActivityForResult

    当他们成功完成付款时,请致电

    setResult(RESULT_OK)
    

    如果他们失败了

    setResult(RESULT_CANCELLED)
    

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