最初我的 AndroidManifest.xml 包含一个我通过其自定义操作名称访问的活动。
<activity
android:label="HERE I AM"
android:name="TestController">
<intent-filter>
<action android:name="com.company.project.TestActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
有了这个清单startActivity(new Intent("com.company.project.TestActivity"));
,我的活动就开始了,没有任何问题。
但我对这种编码风格并不满意。早些时候,我被告知不要使用内联定义的字符串常量,因为它会导致代码的可维护性降低。这确实是一个重点。
所以首先我ublic static final String MY_ACTION = "com.company.project.TestActivity";
在我的 App.java 类(我使用的那个)中声明了 ap 并通过这个命名常量以这种方式到达我的组件:
startActivity(new Intent(App.MY_ACTION));
这似乎好多了,但我仍然必须维护同一字符串的两个实例。在http://developer.android.com/reference/android/R.styleable.html#AndroidManifestAction_name阅读
...这也可能是对包含值的资源(形式为“@[package:]type:name”)或主题属性(形式为“?[package:][type:]name”)的引用这种类型的。
所以我猜想将这个字符串定义为JUST ONCE会很好。我输入<string name="MY_ACTION">com.company.project.TestActivity</string>
了我的 strings.xml 并修改了我的应用程序:
public class App ...
public static String MY_ACTION;
@Override
public void onCreate() {
super.onCreate();
MY_ACTION = getString(R.string.MY_ACTION);
...
一切都还好
...直到我将 AndroidManifest.xml 更改为使用 <action android:name="@string/MY_ACTION" />
而不是<action android:name="com.company.project.TestActivity" />
. 在这个改变给我最大的惊喜之后,应用程序在运行时崩溃了,抱怨没有找到符合我意图的 Activity。字符串引用可能未正确解析。:(
也许问题是 R.string 依赖于配置......?但是,嘿,我不能这么疯狂地选择这样一个字符串引用,它的值可能会从一个配置变为另一个配置!developer.android.com 告诉我可以在动作名称中使用引用!我在 API 级别 6、7、8 结束时遇到了这种行为。这只是 android 系统中的一个简单错误吗?还是我误解了什么?
我完全困惑,请帮助我。提前致谢。