在Android中调用一个变量的Intent

时间:2011-12-18 21:31:19

标签: java android android-listview android-intent android-activity

我目前有一个列表视图,我试图将列表视图指向不同的活动。因此,如果您点击1-4中的某个项目,那么您将获得与之对应的类。我能想到的唯一方法就是抓住列表视图中项目的文本并启动该名称的活动。它的代码将是这样的:

final String chosen = "";
chosen = (String) ((TextView) view).getText();
Intent nextScreen = new Intent(getApplicationContext(), chosen.class);

这不起作用。我在最后一行收到错误,说选中的错误无法解析为类型。

我知道((TextView) view).getText()有效,因为

Log.d("Debug", "Test"+((TextView) view).getText());

在logcat中给我正确选择的项目。

任何想法/建议?提前致谢

修改

我尝试将代码更改为:

String chosen = (String) ((TextView) view).getText();
try {
    Intent nextScreen = new Intent(getApplicationContext(), Class.forName(chosen));
    startActivity(nextScreen);
    Log.d("Debug", "Good"+((TextView) view).getText());
    } 
catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Log.d("Debug", "Bad"+((TextView) view).getText());
    }
    Log.d("Debug", "Final"+((TextView) view).getText());

Log cat给了我一个输出

BadItem1
FinalItem1

我认为我正如某人指出的那样以错误的方式解决这个问题。我也认为我应该使用OnItemClickListener。我将尝试并发布我的结果,以便将来提供更方便的帮助。

5 个答案:

答案 0 :(得分:1)

错误在于:

final String chosen = "";
chosen = (String) ((TextView) view).getText();

由于您声明选择为final,因此您只能为其分配一次值:

final String chosen = (String) ((TextView) view).getText();

此外,我想你想要启动名称存储在所选变量中的Activity。你不能为此编写selected.class。正确的方法是:

Class.forName(chosen);

希望这有帮助!

答案 1 :(得分:0)

没有Intent构造函数需要ContextString。您可以在调用Class.forName(chosen)构造函数时执行类似Intent的操作。

答案 2 :(得分:0)

对变量调用.class获取该变量的类,而不是变量内容的类。

我认为您应该使用OnItemClickListener上的ListView来识别所点击的项目。 position参数或调用getItemAtPosition(position)应足以唯一标识列表视图中的项目并调用相应的活动。

请参阅此处的文档:http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

答案 3 :(得分:0)

制作Factory

这样您就不必将类名绑定到用户正在阅读的文本上。为您提供更多灵活性/更好的用户体验/更轻松的代码维护。也可以帮助您separation of concerns

class NavFactory {
    private static final int CLASS_FIRST = 1;     

    public static Intent getNavIntent(Context context, String name){
         switch(getId(name)){
              case CLASS_FIRST:
                  return new Intent(context, FirstClass.class);
               default:
                  return null;
         }
    }

    private static int getId(String name){
       if("listItemOneText".equals(name)
            return CLASS_FIRST;

       return -1;
    }


}

参考:Java Factory Pattern

在你的情况下:

String chosen = (String) ((TextView) view).getText();
Intent nextScreen = NavFactory.getNavIntent(this, chosen);

答案 4 :(得分:0)

您新发送String作为假定class的{​​{1}}。这就是你需要的:

Activity