Android: Как запустить Activity из заголовка предпочтения?

Я пытаюсь запустить действие из заголовка предпочтения.

Я много искал решение, но не нашел, кроме этого вопроса: начать деятельность с предпочтительных заголовков.

но при применении его ответа я получил новое исключение:

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.package.myapp/com.package.myapp.MyActivity}; have you declared this activity in your AndroidManifest.xml?

Это мой код:

<header
    android:icon="@drawable/ic_contacts"
    android:title="@string/menuOptionContact">
    <intent android:targetPackage="com.package.myapp"
        android:targetClass="com.package.myapp.MyActivity" />
</header>

Я пытался изменить код для многих форм, как это: android:targetClass="MyActivity"

Или же android:targetClass=".MyActivity"

все дали мне одно и то же исключение

Я попытался запустить его из соответствующего фрагмента следующим образом:

<header
    android:fragment="com.package.myapp.SettingsActivity$ContactPreferenceFragment"
    android:icon="@drawable/ic_contacts"
    android:title="@string/menuOptionContact">
</header>

и внутри моих фрагментов на создание я положил:

  startActivity(new Intent(getActivity(), MyActivity.class));

он запускает действие, но когда я возвращаюсь назад из MyActivity, он переводит меня в пустой фрагмент, а затем мне приходится снова нажимать, чтобы вернуться в настройки SettingsActivity.

Как я могу запустить MyActivity непосредственно из preference-header или избавиться от пустых фрагментов при обратном нажатии?

редактировать

мой AndroidManifest.xml:

   <activity
        android:name=".MyActivity"
        android:label="@string/app_name">
    </activity>

любая помощь будет очень признательна

1 ответ

Прошло много времени, но на тот случай, если кто-то все еще пытается разобраться с этой проблемой, я решил ее следующим образом

<header
android:title="@string/menuOptionContact">
    <intent android:action="your custom string"
      android:targetClass="com.package.myapp.MyActivity"/>
</header>

в вашем файле манифеста включить следующее:

<activity android:name=".activity.MyActivity" 
              android:label="@string/my_activity_title"
              android:theme="@android:style/Theme.Black.NoTitleBar">
        <intent-filter>
           <action android:name="your custom string" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
    </activity>

В моем случае ошибка возникает, когда я включаю targetPackage вместе с targetClass, и система в конечном итоге объединяет оба вместе. Согласно руководству разработчика Android, и targetClass, и targetPackage являются синонимами метода intent.setComponent.

Другие вопросы по тегам