9

最初我的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系統中的一個簡單錯誤嗎?或者我誤解了某些東西?

我完全不解,請幫助我,提前致謝

回答

4

我今天遇到了同樣的問題,並在其他地方尋找答案,根據Dianne Hackborne的說法,我們試圖做的事情是不允許的,你顯然必須使用文獻l意向過濾器中的字符串。

http://android.bigresource.com/Track/android-zKGKHraw9/

+0

嗨馬克,謝謝,我也傾向於認爲這是情況。我們不被視爲能夠分離配置依賴和獨立字符串的成年人。 :-)我接受你的答案。 – 2011-03-22 20:32:00

相關問題