1

我正在使用以下代码移动到另一个 Activity :

Intent intent = new Intent();  
String test = "Navigate";  
intent.setClassName(this.context,test);  
intent.putExtra("params", params);  
((Activity) context).startActivity(intent);  

但我无法启动导航活动。不会抛出异常。同样,以下代码工作正常:

Intent intent = new Intent(this.context,Navigate.class);  
intent.putExtra("params", params); 
((Activity) context).startActivity(intent);    

请告诉我是否有任何解决方法。

4

2 回答 2

3

您需要完整的类名,包括包:

String test = "your.package.here.Navigate";

(以及 Manifest 中定义的 Activity,但您可以从它开始,Navigate.class我假设您已经这样做了)。

于 2012-04-12T09:15:57.623 回答
1

我会使用更明确的构造函数:Intent (Context packageContext, Class<?> cls). 从文档:

[...] 这提供了一种方便的方法来创建意图执行硬编码类名的意图,而不是依赖系统为您找到合适的类 [...]

此构造函数在内部调用setComponent()- 方法,您使用的 - 方法也会调用该setClassName()方法。但是使用构造函数可以节省代码行并使代码更具可读性:

Intent i = new Intent(this, Navigate.class);
intent.putExtra("params", params);
this.startActivity(i);

请注意,使用this仅在 中时以这种方式工作Activity,因为活动类扩展了 -Context类。

将包和类名硬编码为字符串的另一个优点是,当你将一个类移动到另一个包(或重命名一个包)时,你会得到编译时错误,而不是运行时错误。

此外,要使其正常工作,您需要在 Android Manifest 中注册 Activity。

于 2012-04-12T09:25:56.553 回答