Первоначально мой 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"));
начал свою активность без проблем.
Но яне был удовлетворен этим стилем кодирования.Раньше мне сурово говорили, что не следует использовать встроенные строковые константы, потому что это приведет к менее поддерживаемому коду.И это действительно точка.
Итак, сначала я объявил 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"), содержащая значение этого типа.
Так что я догадался, было бы хорошо, чтобы эта строка была определена 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" />
.После этого изменения, к моему большому удивлению, приложение перестало работать во время выполнения, жалуясь на то, что я не нашел Активность для своих намерений.Ссылка на строку, вероятно, была проанализирована неправильно.: (
Может быть, проблема в том, что R.string зависит от конфигурации ...? Но, эй, я не могу быть настолько безумным, чтобы выбрать такую строковую ссылку, значение которой может измениться от config до config! И developer.android.com сказал мне, что можно использовать ссылки в именах действий! Я испытывал это поведение на уровнях API 6, 7, end 8. Это простая ошибка в системе Android? Или я что-то неправильно понимаю?
Iполностью озадачен, пожалуйста, помогите мне. Заранее спасибо.