【问题标题】:Android: how to pass an activity as extra within an Intent?Android:如何在 Intent 中将活动作为额外的传递?
【发布时间】:2016-07-23 08:02:09
【问题描述】:

我需要启动一个活动,告诉用户完成表单后它必须启动什么活动。

我试过了,它似乎是正确的

new Intent(this, Activity1.class)
     .putExtra("myActivity", Activity2.class);

如果我必须让它启动另一个课程,我会这样做

new Intent(this, Activity1.class)
     .putExtra("myActivity", AnotherActivity.class);

这是正确的方法吗?

在 Activity1 中我应该如何获取 .class 类型的额外参数?

【问题讨论】:

  • 你不要那样做;传递一个唯一值,如字符串“ActivityB”或 C 或整数,如 1、2、3,然后在获得额外信息时切换以知道要启动哪个活动!
  • 你是对的,但这似乎是一种避免切换部分的方法。
  • 你需要选择多少活动?也许从那里我可以提供帮助
  • 其实有两个活动
  • 这应该很容易;让我在下面给出一个答案供您尝试;

标签: android android-intent data-extraction


【解决方案1】:

试试下面的示例代码:

private static final int LAUNCH_A = 100;
private static final int LAUNCH_B = 200;

//launch activity here with extras to decide which other activity to launch next

Intent intent = new Intent(this, Activity1.class);

//Now decide here, which activity you want to launch in the next one

if(shouldLaunchA){
   intent.putExtra("LAUNCH_TARGET", LAUNCH_A); 
}else{
   intent.putExtra("LAUNCH_TARGET", LAUNCH_B);
}

startActivity(intent);

现在,在您的 Activity 1 中,您可以获得附加功能并打开它们:

Intent intent = getIntent();

// you could place this as a class level variable:
int launchTarget = intent.getExtras().getInt("LAUNCH_TARGET");

switch(launchTarget){
   case 100:
      //Launch activity A
      break;
   case 200:
      //launch activity B
      break;
}

这就是完成这项工作所需要的一切!

就像我上面暗示的那样,您应该将launchTarget 变量设置为类级别变量,以便用户在您的EditText 字段输入数据并单击按钮提交后访问它!

祝你好运,如果您需要进一步的帮助,请告诉我!

【讨论】:

  • 这是正确的答案,但使用 enum 可能会更干净。 "类枚举{OPEN_A,OPEN_B;}"
  • 枚举可能非常昂贵
  • @Eenvicible 你能详细说明一下吗?
【解决方案2】:

将 Activity 的名称与包一起传递,然后通过反射获取所需的类。

传递数据:

new Intent(this, Activity1.class)
     .putExtra("myActivity", "com.mypackage.activity.Activity2");

获得所需的活动:

String desiredActivityName = getIntent().getExtras().getString("myActivity");
Class<? extends Activity> targetActivity = Class.forName(desiredActivityName).asSubclass(Activity.class);
Intent launchIntent = new Intent(this, targetActivity);

【讨论】:

    【解决方案3】:

    您为什么要启动一项活动,而该活动又会启动其他活动。相反,使用 if 或 switch 条件来直接启动不同的活动

    创建以下类

    public void startIntent(Class c){
    startActivity(new Intent(youActivity.this,c)
    }

    如果你想使用 if 语句来启动不同的活动

    if(your condition){
    startIntent(Activity1.class)
    }
    if(another condition){
    startIntent(anotherActivity.class)
    }

    【讨论】:

    • 是的,我可以创建一个类,在其中设置我需要在 Activity1 完成任务后启动的类对象,然后这将从同一个类中获取它
    猜你喜欢
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多