最初我的AndroidManifest.xml包含一個我通過自定義動作名稱到達的活動。AndroidManifest中的意圖過濾器的操作名稱不應該使用字符串引用嗎?
<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"));
開始我的活動沒有任何問題。
但我對這種編碼風格並不滿意。早些時候,我被嚴厲的時間告訴不要使用內聯定義的字符串常量,因爲它會導致維護性較差的代碼。而真的是一個點。
所以首先我在App.java類(我用的那個)宣佈AP ublic static final String MY_ACTION = "com.company.project.TestActivity";
並通過這個命名常量這種方式達到我的組件:
startActivity(new Intent(App.MY_ACTION));
這似乎好多了,但我還是必須保持相同字符串的兩個實例。在http://developer.android.com/reference/android/R.styleable.html#AndroidManifestAction_name讀
...這也可能是一個資源的引用(形式爲「@ [包:]類型:名稱」)?或主題屬性(形式爲」 [包:] [type:] name「)包含此類型的值。
所以我猜想這將是很好的,這個字符串定義只有一次。我把<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);
...
,一切都還是O.K.
...直到我將我的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系統中的一個簡單錯誤嗎?或者我誤解了某些東西?
我完全不解,請幫助我,提前致謝
嗨馬克,謝謝,我也傾向於認爲這是情況。我們不被視爲能夠分離配置依賴和獨立字符串的成年人。 :-)我接受你的答案。 – 2011-03-22 20:32:00