Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中调用作为变量的意图_Java_Android_Android Listview_Android Intent_Android Activity - Fatal编程技术网

Java 在Android中调用作为变量的意图

Java 在Android中调用作为变量的意图,java,android,android-listview,android-intent,android-activity,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); 这是行不

我目前有一个列表视图,我正在尝试将列表视图指向不同的活动。因此,如果您单击1-4中的一个项,您将得到对应于该项的类。我能想到的唯一方法是在列表视图中抓取项目的文本并启动该名称的活动。它的代码如下所示:

final String chosen = "";
chosen = (String) ((TextView) view).getText();
Intent nextScreen = new Intent(getApplicationContext(), chosen.class);
这是行不通的。我在最后一行得到一个错误,说selected不能解析为一个类型

我知道
((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
正如有人指出的那样,我想我走错了方向。我还认为我应该使用
监听器
。我将尝试并发布我的结果,以便于将来提供帮助。

错误如下:

final String chosen = "";
chosen = (String) ((TextView) view).getText();
由于您将选定项声明为最终项,因此只能为其赋值一次:

final String chosen = (String) ((TextView) view).getText();
此外,我假设您希望启动活动,该活动的名称存储在所选变量中。无法为此编写selected.class。正确的方法是:

Class.forName(chosen);

希望这有帮助

没有采用
上下文
字符串
意图
构造函数。您可能可以在调用
Intent
构造函数时执行类似
Class.forName(selected)
的操作。

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

我认为您应该使用
ListView
上的
onicmclicklistener
来标识单击的项目。
position
参数或调用
getItemAtPosition(position)
,应该足以在listview中唯一地标识一个项目并调用相应的活动

请参阅此处的文档:

制作一个文件

这样,您就不必将类名与用户正在阅读的文本绑定在一起。为您提供更大的灵活性/更好的用户体验/更易于维护的代码。帮助你的工作

参考:

就你而言:

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

您是新发送的
字符串
作为假定的
活动
。这就是您需要的:

final String chosen = "";
chosen = ((TextView) view).getText();
Class<?> chosenActivity = Class.forName(chosen);
Intent nextScreen = new Intent(this, chosenActivity);
final String selected=“”;
selected=((TextView)视图).getText();
Class chosenActivity=Class.forName(已选择);
Intent nextScreen=新的Intent(此,选择活动);

不要使用应用程序上下文,请使用您刚开始的活动作为上下文
final String chosen = "";
chosen = ((TextView) view).getText();
Class<?> chosenActivity = Class.forName(chosen);
Intent nextScreen = new Intent(this, chosenActivity);