将String变量作为参数传递以在Android中创建新的Intent

时间:2018-07-18 03:12:52

标签: android android-intent

标题可能无法明确说明我要寻找的内容,因此在这里我将尝试对其进行解释。

我们可以创建一个意图来在Android中启动另一个活动:

var firstName = prompt("What's your first name?");
var lastName = prompt("Ooo I like that. So, what's your last name?");

var answer = prompt(firstName + " " + lastName + ", huh? Wow, I love that name! I'm a little bored right now...so, would you like to play a Choose Your Own Adventure Game?");

if (answer === "yes" || "Yes") {
    alert("Woohoo! I haven't played this in a long time. Okay, here goes. Press the OK button to start.");
} 
else {
    alert("Oh, okay. Well, I'll see you later.");
}

我想要完成的是:

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

但这无法正常工作,Android Studio给了我这个错误: “无法解析构造函数('android.content.Context,java.lang.String')”

因此,它不接受第二个参数作为字符串。如果有人能为我解释这是为什么发生以及如何解决的话,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

您应该首先避免将其作为String传递。但是,如果它超出了您的控制范围或您的设计要求(没有充分的理由这样做),则可以如下使用Class.forName()

    String activityName = "<packagename>.trackingActivity";
    try {
        Intent intent = new Intent(this, Class.forName(activityName));
        startActivity(intent);
    } catch (ClassNotFoundException e) {
        //take necessary action
    }

更好的选择如下:

  1. 传递Intent对象

如下:

public void startActivity(final Intent intent) {
        //intent.putExtra(..)
        ...
        startActivity(intent);
}
  1. 通过Class

如下:

public void startActivity(Class activityClass) {
    Intent intent = new Intent(this, activityClass);
    ...
    startActivity(intent);
}

答案 1 :(得分:1)

使用Polymorphism的{​​{1}}概念。假设您有5个OOP

ActivityActivity1Activity2Activity3Activity4

使用此方法

Activity5

然后像这样开始private Intent getActivityIntent(Class<? extends Activity> mStartActivityClass){ Intent intent = new Intent(this, mStartActivityClass); return intent; }

Activity

您不必重复代码。一种方法可以处理所有Intent intent1 = getActivityIntent(Activity1.class); startActivity(intent1); Intent intent2 = getActivityIntent(Activity2.class); startActivity(intent2); Intent intent3 = getActivityIntent(Activity3.class); startActivity(intent3); .............