使用Intent和SetClassName启动活动

时间:2012-04-12 09:12:44

标签: android android-activity android-intent

我使用以下代码移动到另一个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);    

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

2 个答案:

答案 0 :(得分:3)

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

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

(和Manifest中定义的Activity,但是你可以用Navigate.class启动它我假设你已经这样做了。)

答案 1 :(得分: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 - 类。

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

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