studio programacion herramientas fundamentos con avanzado aplicaciones android android-fragments android-activity android-xml android-preferences

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 le isValidFragment(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.

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

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

  3. 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); } }