我使用下面的代码移动到另一个活动:
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);
如果任何解决办法,请告诉我。
你需要完整的类名,包括包:
String test = "your.package.here.Navigate";
(在清单中定义的活动,但你可以这样做Navigate.class
我假设你已经做到了这一点)。
我会用更明确的构造函数: 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清单注册活动。