0

这更像是一个 Java 问题,因为它与 Android 相关。

我的代码包含一个包含 30 个案例的 switch 语句。每个案例的正文具有相同的格式来启动与该案例相关的意图。我试图将主体编码为以类名作为参数的方法,但该代码无法编译,因为类名必须在意图中进行硬编码。

下面是开关的一部分(很长的路)

            switch(mState) {
    case 0:
               Intent myIntent = new Intent();
               myIntent.setClass(Home_ASM.this, Home_AS0.class);
               startActivityForResult(myIntent, 0);
               break;

    case 1:
              Intent myIntent1 = new Intent(); 
              myIntent1.setClass(Home_ASM.this, Home_AS1.class);
              startActivityForResult(myIntent1, 2);
              break;    

我想编写这样的代码:

            switch(mState) {
            case 0:
               myStart(Home_AS0.class,1);
               break;
            case 1:
               myStart(Home_AS1.class,2);
               break;

和方法

private void myStart(String state, int value) {
            Intent myIntent = new Intent();
            myIntent.setClass(Home_ASM.this, state);
            startAcivityForResult(myIntent, value);
            }

关于如何完成这项工作的任何想法?

4

3 回答 3

2

你可以试试Class.forName("nameofClass");

编辑:编辑后,乔恩·泰勒的回答比我的回答更合适。请参阅:http ://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#forName%28java.lang.String%29

于 2012-07-25T14:55:47.887 回答
2

为什么没有方法

private void myStart(Class class, int value)

只是传递一个类而不是一个字符串?

于 2012-07-25T14:54:56.810 回答
1

我们做类似的事情。我们的代码看起来有点像这样:

切换语句:

case 0:
      {
         launchActivity(ActivityOne.class, value);
         break;
      }

发起活动的方法:

private void launchActivity(Class<?> aClass, int value) {
        Intent intent = new Intent();
        intent.setClass(this, aClass);
        startActivityForResult(intent, value);
    }

您可以轻松地对其进行调整以获取您的特定int价值。希望这可以帮助!

于 2012-07-25T15:02:48.940 回答