programacion - manual de android en pdf
¿Cómo se crea la Actividad de preferencia y el Fragmento de preferencia en Android? (2)
Encontré esta publicación ( ¿Qué usar en lugar de "addPreferencesFromResource" en una actividad de preferencia? ) Que me ayuda a entender que tienes que ir a través de un PreferenceFragment
para poder hacerlo.
En la siguiente explicación, uso your.package.
solo para mostrar que tienes que poner el nombre del paquete. Todo el mundo tiene su propio paquete, así que reemplácelo con su paquete.
vamos a empezar :
1. Fragmento de preferencia
Crea tu clase PreferenceFragment
MyPreferenceFragment
public class MyPreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.fragment_preference); } }
Entonces el recurso xml asociado
fragment_preference.xml (en la carpeta res / xml de su proyecto)
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="FOO"> <CheckBoxPreference android:key="checkBoxPref" android:title="check it out" android:summary="click this little box"/> </PreferenceCategory> </PreferenceScreen>
Eso es todo por la parte del
Fragment
.
2. Actividad de preferencia
Crear la clase PreferenceActivity
MyPreferenceActivity
public class MyPreferenceActivity extends PreferenceActivity { @Override public void onBuildHeaders(List<Header> target) { loadHeadersFromResource(R.xml.headers_preference, target); } @Override protected boolean isValidFragment(String fragmentName) { return MyPreferenceFragment.class.getName().equals(fragmentName); } }
¡No olvide anular el
isValidFragment(String fragmentName)
ya que su aplicación leisValidFragment(String fragmentName)
la cara! ;) Más en serio, no tengo idea de por qué tienes que hacer esto, pero es necesario. Si alguien tiene una explicación sobre esto, con mucho gusto lo leí :)EDITAR:
Gracias a kirtan403 ahora sé por qué es necesario: tiene que configurarse debido a una ( inyección de fragmento de framework android ).
Como puede ver en el
onBuildHeaders(List<Header> target)
otro archivo xml que contiene los encabezados de la preferencia. En resumen, los encabezados son la parte izquierda de la preferencia y el fragmento es la parte correcta (para la tableta). Para un teléfono, primero tendrá los encabezados y cuando haga clic en un elemento, el fragmento correspondiente se colocará en la parte superior de la lista de encabezados.Lea este artículo ( Desarrollo de varios paneles en Android con Fragmentos - Tutorial ) las imágenes se explican por sí mismas.
Entonces el recurso xml asociado
headers_preference.xml (en la carpeta res / xml de su proyecto)
<?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> <header android:fragment="your.package.MyPreferenceFragment" android:title="Goto: Preference fragment" android:summary="An example of some preferences." /> </preference-headers>
Como habrás notado en la sección del encabezado , tienes:
android:fragment="your.package.MyPreferenceFragment"
Esto actuará como un enlace al fragmento que desea mostrar. En la tableta se cargará en la parte derecha y en el teléfono se cargará en la parte superior de la vista actual.
3. Manifiesto de Android
Ahora lo que debes hacer es agregar tu actividad al archivo AndroidManifest.xml
.
Dentro de la sección de la application
, agregue estas líneas:
<activity
android:name="your.package.MyPreferenceActivity"
android:label="Preferences">
</activity>
Probablemente me digas:
"Cariño, olvidaste poner android: launchMode =" singleTask " en tu actvidad"
Pero NO PONGA ESTO ya que nunca cargará su fragmento en el teléfono. Este error fue resuelto por un gran hombre! Este es el enlace a su blog ( preferencias de encabezado de Android en pantalla pequeña / teléfono ).
4. Comience las Preferencias del Menú
¡Finalmente necesitas agregar la habilidad de mostrar esta Preferencia! Para hacerlo necesitarás 3 cosas:
El menú
menu.xml (en la carpeta res / menu de su proyecto)
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/preferences" android:title="Preferences" /> </menu>
Cargando este menú en su actividad principal (no la actividad de preferencia) en el método
onCreateOptionsMenu(Menu menu)
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; }
Iniciando la actividad
MyPreferenceActivity
cuando haces clic en ese botón.Para eso, tendrá que anular el
onOptionsItemSelected(MenuItem item)
en su actividad Principal.@Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.preferences: { Intent intent = new Intent(); intent.setClassName(this, "your.package.MyPreferenceActivity"); startActivity(intent); return true; } } return super.onOptionsItemSelected(item); }
Et voila les amis!
No he probado este código. Lo tomé y lo modifiqué de mi propio código, por lo que es posible que no haya copiado bien las cosas pegadas. Si encuentra errores dígame, intentaré resolver el problema y solucionarlo.
Espero que esta publicación ayude a algunas personas: D
¡Salud!
Como estaba siguiendo un viejo tutorial ( Créez des applications pour Android -> openclassroom ) me quedé atrapado en este método en desuso addPreferencesFromResource(int id)
de la clase PreferenceActivity.
Entonces mi pregunta es:
¿Cuál es la nueva forma de crear Preferencias en Android?
Me gustó la solución de esta publicación: http://alvinalexander.com/android/android-tutorial-preferencescreen-preferenceactivity-preferencefragment
.. porque parece el más compacto para alguien que solo necesita algo muy básico y funcionando rápidamente. Tiene solo un archivo .java y dos pequeños archivos xml.
Actividad RECORDATORIOS
Después de agregar los 3 archivos a su proyecto, no olvide
A) Agregue la actividad Prefs al archivo Manifest
B) Agregue una forma de iniciar la actividad Prefs ... por ejemplo, un botón o elemento de menú
Agregue los siguientes archivos a su proyecto. Use el orden en el que están listados para evitar errores de compilación.
Agregue /res/values/array.xml
<resources> <string-array name="listArray"> <item>Ace</item> <item>Club</item> </string-array> <string-array name="listValues"> <item>Ace</item> <item>Club</item> </string-array> </resources>
Agregue /res/xml/preferences.xml
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <EditTextPreference android:title="Your Name" android:key="username" android:summary="Please provide your username"></EditTextPreference> <CheckBoxPreference android:title="Application Updates" android:defaultValue="false" android:summary="This option if selected will allow the application to check for latest versions." android:key="applicationUpdates" /> <ListPreference android:title="Download Details" android:summary="Select the kind of data that you would like to download" android:key="downloadType" android:defaultValue="Ace" android:entries="@array/listArray" android:entryValues="@array/listValues" /> </PreferenceScreen>
Agregar el código de la actividad
public class AppPreferenceActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit(); checkValues(); } public static class MyPreferenceFragment extends PreferenceFragment { @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } private void checkValues() { SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); String strUserName = sharedPrefs.getString("username", "NA"); boolean bAppUpdates = sharedPrefs.getBoolean("applicationUpdates",false); String downloadType = sharedPrefs.getString("downloadType","1"); String msg = "Cur Values: "; msg += "/n userName = " + strUserName; msg += "/n bAppUpdates = " + bAppUpdates; msg += "/n downloadType = " + downloadType; Toaster.shortDebug(msg); } }