Разве строковые ссылки не должны работать для имен действий фильтра намерений в AndroidManifest?

Первоначально мой 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")); запустил мою Activity без каких-либо проблем.

Но меня не устраивал такой стиль кодирования. Раньше мне суровые времена советовали не использовать строковые константы, определенные в строке, потому что это может привести к менее удобному в сопровождении коду. И это действительно балл.

Итак, сначала я объявил ap ublic static final String MY_ACTION = "com.company.project.TestActivity"; в моем классе App.java (тот, для которого я использовал) и достиг своего компонента через этот именованный константу таким образом:

startActivity (new Intent (App.MY_ACTION));

Это казалось намного лучше, но мне все равно пришлось поддерживать два экземпляра одной и той же строки. На http://developer.android.com/reference/android/R.styleable.html#AndroidManifestAction_name чтение

... Это также может быть ссылка на ресурс (в форме " @ [package:] type: name ") или атрибут темы (в форме"? [package:] [type:] name "), содержащий значение этого типа.

Итак, я подумал, что было бы хорошо, если бы эта строка была определена ТОЛЬКО ОДИН РАЗ . Я поставил com.company.project.TestActivity в моем 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 на вместо . После этого изменения, к моему величайшему удивлению, приложение перестало работать во время выполнения, жалуясь на то, что я не нашел Activity для моего намерения. Ссылка на строку, вероятно, была проанализирована неправильно. : (

Может быть, проблема в том, что R.string зависит от конфигурации ...? Но я не могу быть настолько безумным, чтобы выбрать такую ​​строковую ссылку, значение которой может меняться от конфигурации к конфигурации! И developer.android.com сказал мне это нормально использовать ссылки в названиях действий! Я испытал такое поведение на уровнях API 6, 7, конец 8. Это просто ошибка в системе Android? Или я что-то неправильно понимаю?

Я полностью озадачен, пожалуйста, помогите меня. Заранее спасибо.

10
задан Programmer Bruce 28 May 2011 в 13:09
поделиться