Начать деятельность с предпочтительных заголовков - PullRequest
8 голосов
/ 11 января 2012

Я реализую n-слой PreferenceActivities. 1-й уровень PreferenceActivity загружается из preference-headers.

Первый заголовок создает фрагмент настроек, который является PreferenceFragment.Второе - это действие браузера (второе - пример с developer.android.com), которое открывает указанный URL.Третий, я хочу быть следующим уровнем PreferenceActivity, который также будет загружен из preference-headers.

Первые два работают нормально, но в третьем случае происходит сбой приложения за исключением:

"android.content.ActivityNotFoundException: не найдено ни одного действия для обработки Intent= com.mycompany.myapp.ui.MyPreferenceActivity} "

MyPreferenceActivity, объявленное в файле манифеста.Возможно, декларация активности в main_headers.xml неверна, но я не нашел в справочниках ни одного совета, как это сделать правильно.Пробовал несколько вариантов, они не работали.

Пример, который я использовал: http://developer.android.com/reference/android/preference/PreferenceActivity.html

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

public class MySettings extends PreferenceActivity 
{
    @Override
    public void onBuildHeaders(List<Header> target) 
    {
        loadHeadersFromResource(R.xml.main_headers, target);
    }
}

main_headers.xml:

<?xml version="1.0" encoding="utf-8"?>
<preference-headers
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <header android:title="Custom Settings"
        android:fragment="com.mycompany.myapp.ui.SettingsFragment" />

    <header android:title="Intent"
        android:summary="Launches an Intent.">
        <intent android:action="android.intent.action.VIEW"
                android:data="http://www.android.com" />
    </header>

    <header android:title="Another Preference Activity">
        <intent android:action="android.intent.action.VIEW"
            android:data="com.mycompany.myapp.ui.MyPreferenceActivity" />
    </header>
</preference-headers>

Ответы [ 3 ]

17 голосов
/ 18 февраля 2012

Если вы хотите начать явное действие со своего третьего предпочтения, сделайте следующее:

<intent android:targetPackage="com.mycompany.myapp"
        android:targetClass="com.mycompany.myapp.ui.MyPreferenceActivity" />
1 голос
/ 31 декабря 2016
 <header android:title="Intent"
    android:summary="Launches an Intent.">
<intent android:targetPackage="com.mycompany.myapp"
        android:targetClass="com.mycompany.myapp.ui.MyPreferenceActivity" /></header>

и добавьте приведенный ниже код в файл mainfest

<activity android:name=".activities.MyActivity" 
              android:label="@string/my_activity_title"
              android:theme="@android:style/Theme.Black.NoTitleBar">
        <intent-filter>
           <action android:name="com.example.myapp.activities.MyActivity" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
    </activity>
0 голосов
/ 27 августа 2012

если вы создаете настройки с использованием Java, то вы можете достичь того же результата,

PreferenceScreen editPhoneNumbersScreen = getPreferenceManager().createPreferenceScreen(mContext);
    editPhoneNumbersScreen.setTitle(getResources().getString(R.string.change_add_emergency_numbers));
    editPhoneNumbersScreen.setSummary(getResources().getString(R.string.summary_add_no));


 Intent i = new Intent(getApplicationContext(),TargetActivity.class);
i.putExtra("change numbers", true);
        editPhoneNumbersScreen.setIntent(i);
...