我使用以下代码移动到另一个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);
请告诉我是否有任何解决方法。
答案 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。