【发布时间】:2017-06-14 16:11:28
【问题描述】:
我有一个在线订购系统,用户至少可以通过三个步骤完成订购。以下每个步骤都是一个单独的活动:
- 选择计划
- 选择开始日期
- 根据步骤 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();
在第二个活动中没有,我要求用户选择订单开始日期。这也很简单,没有任何问题。但是当我尝试切换到第三个活动时,问题就开始了。
由于我的第三个活动内容取决于第一个活动中所做的计划选择,因此我必须将所选ID转移到第三个活动中。我在第二个活动的 Extra Bundle 中有它作为“pass_selected_meal_plan_id”。
我加载第三个活动的方式也很关键。有两种可能的方式来启动第三个活动。首先非常简单,只需将 onClick 放在下一步按钮上即可。我认为转移所需的选择也将非常简单。但在这种情况下,据我所知,作为 Android 应用程序开发的初学者,我将不得不提供一个按钮来根据所选计划单击和加载内容。
第二种方式是我想要使用的。我在第二个活动 onClick Next 中运行 AsyncTask。它工作得很好。唯一的原因是我无法从上一个活动(即第一个活动)中获取 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);
}
如果有人能提供帮助将不胜感激。
【问题讨论】:
-
您说第二个活动具有第一个活动提供的捆绑包中的 id。实际上是什么阻碍了你?无法从 bundle 中取出 id?
-
感谢您的快速回复。问题是我无法在 onPostExecute 中获取值,因为在那里定义了下一个活动的 Extras。如果我在没有 AsyncTask 的情况下传输它,它工作得很好。换句话说,这个问题的解决方法可以是把之前activity的getExtras赋值给onPostExecute中的puExtras。
标签: android android-activity android-asynctask global-variables