7

Sto implementando PreferenceAttività n-layer Primo livello PreferenceAttività viene caricata dalle intestazioni di preferenza.Avvia l'attività dalle intestazioni di preferenza

Prima intestazione crea il frammento di impostazioni che è un PreferenceFragment. La seconda è l'attività del browser (la seconda è un esempio di developer.android.com) che apre l'URL specificato. Il terzo voglio essere un prossimo livello di PreferenceAtivity che verrà caricato anche dalle intestazioni delle preferenze.

Prima due lavorano bene, ma 3 ° si blocca un app con l'eccezione:

"android.content.ActivityNotFoundException: trovate attività per gestire Intent {atto = android.intent.action.VIEW dat = com.mycompany .myapp.ui.MyPreferenceActivity} "

MyPreferenceActivity dichiarato nel file manifest. Probabilmente la dichiarazione di attività in main_headers.xml è sbagliata, ma non ho trovato nei riferimenti alcun consiglio su come farlo. Ho provato diverse varianti, non hanno funzionato.

esempio ho usato: http://developer.android.com/reference/android/preference/PreferenceActivity.html

Qualche idea perché non funziona per me o come la prossima PreferenceActivity può essere chiamato? Fondamentalmente ho solo bisogno di iniziare un'attività dall'intestazione, che dovrebbe essere davvero semplice ma mi manca qualcosa.

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> 

risposta

17

Se si desidera avviare un esplicito attività dal tuo terzo preferenza allora fare questo:

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

mi rendo conto che questa è una vecchia questione. Ti capita di sapere come specificare un intento per il pacchetto Android predefinito? per esempio. 'Settings.ACTION_ADD_ACCOUNT'? – Jin

+0

Ha lavorato con me, grazie –

0

se si sta creando preferenze utilizzando Java, quindi è possibile ottenere lo stesso risultato entro il

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> 

e aggiungere il seguente codice nel file di 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>