我有一个在线订购系统,用户可以从中完成订单,至少需要三个步骤。以下每个步骤都是一项单独的活动:
现在我在第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中,我要求用户选择订单开始日期。这也很简单,没有任何问题。但是当我试图切换到第三个活动时,问题就开始了。
由于我的第三个活动内容取决于第一个活动中的计划选择,因此我必须将选定的ID转移到第三个活动。我在第二个活动的Extra Bundle中有#34; pass_selected_meal_plan_id"。
我加载第三项活动的方式也很重要。有两种方法可以启动第三项活动。首先是点击下一个按钮非常简单。我假设转移所需的选择也很简单。但在这种情况下,据我所知,作为Android App Development的初学者,我必须根据所选计划提供一个按钮来点击和加载内容。
第二种方式是我想要使用的方式。我正在第二个活动onClick Next上运行AsyncTask。它工作得非常好。唯一的一点就是我无法从上一个Activity中的onPostExecute获取exxt,即第一个活动。
我甚至愿意使用全局变量,但我真的不知道该怎么做。知道全局变量是什么,我不太热衷于使用它们。
这是我的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);
}
如果有人可以提供帮助,我们将非常感激。
答案 0 :(得分:2)
您可以使用以下代码
在你的第二个活动中
// 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中,在启动第三个活动之前编写下面的代码。
@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);
}
最后,您可以在第三个活动中获取这些值。
我要强调的一点是避免使用通用变量名称,例如: ID。它在本答复中仅供参考,但并不是一个好主意。您可能面临的一个明显问题是Refactor>改名。它甚至会改变XML文件中的@ + id。