从preference-headers启动活动

时间:2012-01-10 20:23:56

标签: android android-fragments preferenceactivity android-3.0-honeycomb

我正在实施n层PreferenceActivities 第一层PreferenceActivity从preference-headers加载。

第一个标题创建一个PreferenceFragment设置片段。第二个是浏览器活动(第二个是来自developer.android.com的示例),它打开指定的Url。第三个我想成为PreferenceAtivity的下一级,它也将从preference-headers加载。

前两个工作正常,但第三个是崩溃的应用程序,但例外:

“android.content.ActivityNotFoundException:找不到处理Intent的活动{act = android.intent.action.VIEW dat = 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 个答案:

答案 0 :(得分:17)

如果您想从第三个偏好开始显式活动,请执行以下操作:

<intent android:targetPackage="com.mycompany.myapp"
        android:targetClass="com.mycompany.myapp.ui.MyPreferenceActivity" />

答案 1 :(得分:1)

 <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>

答案 2 :(得分:0)

如果您使用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);