启动意图和SetClassName的活动(Starting an Activity with Int

2019-07-28 22:07发布

我使用下面的代码移动到另一个活动:

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

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

Answer 1:

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

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

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



Answer 2:

我会用更明确的构造函数: 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清单注册活动。



文章来源: Starting an Activity with Intent and SetClassName