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