7

我正在實現n層PreferenceActivities 第1層PreferenceActivity是從偏好標題加載的。從偏好標題開始活動

第一個標題創建一個PreferenceFragment設置的片段。其次是瀏覽器活動(第二個是來自developer.android.com的示例),它打開指定的Url。第三個我想成爲PreferenceAtivity的下一個級別,它也會從首選標題中加載。

前兩個工作正常,但第三崩潰所不同的應用:

「android.content.ActivityNotFoundException:無活動處理意向{行動= android.intent.action.VIEW DAT = com.mycompany .myapp.ui.MyPreferenceActivity} 「

MyPreferenceActivity在清單文件中聲明。在main_headers.xml中可能聲明的活動是錯誤的,但是我沒有在參考文獻中找到任何提示如何正確執行它。嘗試了幾個變化,他們沒有工作。

例1所用: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> 

回答

17

如果你想從你的第三個優先啓動一個明確的活動,然後做到這一點:

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

我意識到這是一個老問題。你碰巧知道如何指定默認Android包的意圖嗎?例如'Settings.ACTION_ADD_ACCOUNT'? – Jin 2014-04-01 20:11:34

+0

和我一起工作,謝謝 – 2016-12-31 02:58:15

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); 
0
<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>