Avviare attività di preferenza-headers
-
26-10-2019 - |
Domanda
Sto implementando n-layer PreferenceActivities 1 ° strato PreferenceActivity viene caricato dalla preferenza-header.
Prima di intestazione crea frammento di impostazioni che è un PreferenceFragment.Il secondo è un browser di attività (2 ° è un esempio da developer.android.com che apre un Url specificato.Il terzo voglio essere un successivo livello di PreferenceAtivity che sarà anche essere caricato dalla preferenza-header.
Primi due funzionano bene ma il 3 ° è il crash di un'applicazione con l'eccezione di:
"android.contenuto.ActivityNotFoundException:Nessuna Attività trovata per gestire Intento { act=android.l'intento.azione.VISTA dat=com.mycompany.myapp.interfaccia utente.MyPreferenceActivity} "
MyPreferenceActivity dichiarato nel file manifest.Probabilmente dichiarazione di attività in main_headers.xml è sbagliato, ma non ho trovato riferimenti in qualsiasi suggerimento come fare corretto.Provato diverse varianti, non hanno funzionato.
Esempio che ho utilizzato: http://developer.android.com/reference/android/preference/PreferenceActivity.html
Qualsiasi pensiero, perché non funziona per me, o come il prossimo PreferenceActivity può essere chiamato?Fondamentalmente ho solo bisogno di iniziare un'attività da intestazione, che dovrebbe essere molto 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>
Soluzione
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" />
Altri suggerimenti
<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 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>
se si sta creando preferenze utilizzando Java, quindi è possibile ottenere lo stesso risultato,
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);