转到带有返回结果名称的活动?

时间:2012-08-30 06:18:58

标签: android if-statement android-activity for-loop

我想使用从resultPhone返回的名称进行活动,例如:当前的手机名称是GalaxyS3,然后我希望它转到GalaxyS3.class。我怎么能这样做?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String[] supportedPhone = getResources().getStringArray(R.array.supported_phone);
    String[] supportedVersion = getResources().getStringArray(R.array.supported_version);
    String currentPhone = android.os.Build.MODEL;
    String currentVersion = android.os.Build.VERSION.RELEASE;

    for(String cP : supportedPhone) {
        String resultPhone = cP;
        for(String cV : supportedVersion) {
            String resultVersion = cV;
            if ((currentPhone.equalsIgnoreCase(resultPhone)) && (currentVersion.equalsIgnoreCase(resultVersion))) {
                Intent gotoPhoneDetail = new Intent(this, "resultPhone" + ".class");
                startActivity(gotoPhoneDetail);
                // how can i make this go to the activity with the name return from resultPhone?
            } else {
                setContentView(R.layout.phone_checker); 
            }
        }
    }
}

6 个答案:

答案 0 :(得分:3)

您可以使用Intent setClassName()这绝对适合您的解决方案。

Intent gotoPhoneDetail = new Intent(getApplicationContext());
gotoPhoneDetail.setClassName(getApplicationContext(), getApplicationContext().getPackageName()+"."+resultPhone);

注意:类必须存在,并且必须在Android Manifest文件中有条目

答案 1 :(得分:0)

我觉得这不行。请记住,您必须先在清单文件中注册活动。您打算如何实施?

答案 2 :(得分:0)

使用startActivity()方法启动任何activity

 Intent intent = new Intent(YourCurrentActivity.this,YourNewActivity.class); // In your case GalaxyS3.class
 startActivity(intent); // Like this you can start Activity.

并且始终在AndroidMenifest标记下的application文件中提及新活动的名称。

答案 3 :(得分:0)

您应该能够使用以下方法从名称中检索类对象:

Class.forName ( className );

其中className是一个包含类名的字符串(在您的情况下是resultPhone)。

尝试以下方法:

try {
    Class <?> myActivity = Class.forName ( resultPhone );
    Intent intent = new Intent ( this , myActivity );
    startActivity ( intent );
} catch (ClassNotFoundException e) {
    e.printStackTrace();
    // Do something else, maybe warn the user that the application does not support his/her phone ...
}

让我知道它是否有效。

答案 4 :(得分:0)

您应该使用Class.forName()

if ((currentPhone.equalsIgnoreCase(resultPhone)) && (currentVersion.equalsIgnoreCase(resultVersion))) {

    Class<?> phoneClass = null;
    try {
        phoneClass = Class.forName(resultPhone);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Intent gotoPhoneDetail = new Intent(this, phoneClass);
    startActivity(gotoPhoneDetail);

}

答案 5 :(得分:0)

使用Class.forName(resultPhone)将为您提供Class对象,您可以在意图中使用它,如此处许多人所建议的那样。但是你使用的逻辑容易出错,从长远来看可能不是一个好的逻辑。我建议你使用'工厂类'来获取Class对象。

这样,您可以在将来添加更多支持手机,如果不支持该型号,也可以添加默认类。工厂类可能看起来像这样

  class PhoneModelClassFactory{
      public static Class getPhoneModel(String className){

         if (className.equals("GS3")) return GS3.class
         else if(className.equals("GS4")) return GS4.class
         // add more here
         else  return DefaultPhoneModel.class
      }
  }

现在你可以从你的方法中打电话

       Class phoneClass = PhoneModelClassFactory.getPhoneModel(currentPhone);
       Intent i = new Intent(this, phoneClass);
       startActivity(i);