2012-04-12 56 views
1

我使用下面的代码移动到另一个活动的活动:启动意图和SetClassName

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);  

请告诉我,如果任何解决办法。

+1

解决了您的问题? – 2012-04-12 09:25:47

回答

3

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

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

(在清单中定义的活动,但你可以用Navigate.class启动它我假设你已经做到了这一点)。

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 -class。

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

此外,为此,您需要在Android Manifest中注册活动。