gpt4 book ai didi

android - 通过 AsyncTask 将值从第一个 Activity 传递到第三个 Activity

转载 作者:行者123 更新时间:2023-11-29 19:23:21 24 4
gpt4 key购买 nike

我有一个在线订购系统,用户至少可以通过三个步骤完成订购。下面的每个步骤都是一个单独的 Activity :

  1. 选择一个计划
  2. 选择开始日期
  3. 根据第 1 步中选择的计划选择内容。

现在我在第 1 步中所做的是,一旦用户点击计划和订单,下面的代码就会运行 onClick。

Intent intent = new Intent(context, SelectDate.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Bundle extras = new Bundle();

extras.putString("pass_selected_meal_plan_id",mp_id_pass);
extras.putString("pass_selected_meal_name",mp_name_display);

intent.putExtras(extras);

context.startActivity(intent);

Toast.makeText(context, mp_name_display+" Selected",
Toast.LENGTH_SHORT).show();

在第二个 Activity 中没有,我要求用户选择订单开始日期。这也很简单,没有问题。但是当我尝试切换到第三个 Activity 时,问题就开始了。

由于我的第三个 Activity 内容取决于第一个 Activity 中选择的计划,因此我必须将选择的 ID 转移到第三个 Activity 中。我在第二个 Activity 的额外 bundle 中将其作为“pass_selected_meal_plan_id”。

我加载第三个 Activity 的方式也很重要。有两种可能的方式来启动第三个 Activity 。首先非常简单,只需将 onClick 放在下一步按钮上。我认为传输所需的选择也将非常简单。但在这种情况下,据我所知,作为 Android 应用程序开发的初学者,我将不得不根据所选计划提供一个按钮来单击和加载内容。

第二种方式是我想用的。我在第二个 Activity onClick Next 中运行 AsyncTask。它工作得很好。唯一的问题是我无法从上一个 Activity (即第一个 Activity )的 onPostExecute 中获取 Extras。

我什至愿意使用全局变量,但真的不知道该怎么做。知道什么是全局变量,我不太热衷于使用它们。

这是我的 onPostExecute 代码:

@Override
protected void onPostExecute(String result) {
Intent intent = new Intent(ctx, SelectMeals.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Bundle extras = new Bundle();

//Instead of "1" I want the value from previous Activity, which already available in Extras from previous Activity
extras.putString("pass_selected_meal_plan_id", "1");

//This is the second value I want to be transferred from first activity to the third activity
extras.putString("pass_selected_meal_name","Test");

intent.putExtras(extras);

ctx.startActivity(intent);
}

如果有人能提供帮助,我们将不胜感激。

最佳答案

你可以使用下面的代码

在你的第二个 Activity 中

// declare global variables

String id;
String name;

onCreate 中使用下面的代码

Bundle bundle = getIntent().getExtras();

//Extract the data…
id = bundle.getString("pass_selected_meal_plan_id");
name = bundle.getString("pass_selected_meal_name");

现在在您的 Asynctask 中,在启动第 3 个 Activity 之前编写以下代码。

@Override
protected void onPostExecute(String result) {
Intent intent = new Intent(ctx, SelectMeals.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Bundle extras = new Bundle();
extras.putString("pass_selected_meal_plan_id",id); // first activity data
extras.putString("pass_selected_meal_name",name); // first activity data
intent.putExtras(extras);

ctx.startActivity(intent);
}

最后,您可以在第三个 Activity 中获取这些值。

我想强调的一个重点是避免使用通用变量名,例如ID。它仅用于此答案中的引用,但这不是一个好主意。这样做可能面临的一个明显问题是重构 > 重命名。它甚至会更改 XML 文件中的 @+id。

关于android - 通过 AsyncTask 将值从第一个 Activity 传递到第三个 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41920055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com