studio preferencefragmentcompat not medium found example developer java android android-fragments deprecated android-preferences

java - preferencefragmentcompat - Método no encontrado de findPreference()?-Android



preference screen android studio (3)

¿Hay un equivalente no obsoleto?

Si está utilizando PreferenceFragment en dispositivos de nivel 11+ de API, debería llamar a findPreference() en él. De lo contrario, llame a findPreference() en su PreferenceActivity , ya que no tiene otra opción.

Si no, ¿qué pasa si lo uso de todos modos?

Funcionará.

¿Cómo pueden los Fragmentos ayudarme a hacer mi tarea de una mejor manera?

API Level 11+ introdujo PreferenceFragment como otra forma de construir los contenidos de una actividad de PreferenceActivity . Le invitamos a usarlos, pero si todavía está soportando dispositivos más antiguos, no puede usar PreferenceFragment para esos dispositivos.

Habiendo dicho eso:

Quiero detectar cuándo se hace clic en una preferencia contenida en un ListView, de modo que pueda iniciar una intención para administrar esa selección.

No necesita código Java para esto. Utilizar:

<PreferenceScreen android:title="@string/title_intent_preference" android:summary="@string/summary_intent_preference"> <intent android:action="android.intent.action.VIEW" android:data="http://www.android.com" /> </PreferenceScreen>

(como se ve en los JavaDocs para PreferenceActivity )

Esto creará una entrada en la interfaz de usuario de preferencia que, al hacer clic en ella, iniciará una actividad con la Intent especificada.

Quiero detectar cuándo se hace clic en una Preference contenida en un ListView , de modo que pueda iniciar una intención para administrar esa selección.

Lo hubiera hecho así en mi archivo XML diseño:

<Preference android:title="About" android:key="myKey"></Preference>

Y lo siguiente en mi código de java :

Preference myPref = (Preference) findPreference("myKey"); myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { //open browser or intent here } });

Pero el método public Preference findPreference (CharSequence key) está en desuso.

  1. ¿Hay un equivalente no obsoleto?
  2. Si no, ¿qué pasa si lo uso de todos modos?
  3. ¿Cómo pueden los Fragments ayudarme a hacer mi tarea de una mejor manera? Consulte aquí: Preferencias sin métodos obsoletos .

Aquí puede verificar la estructura de diseño XML que tiene mi actividad y una instantánea de la aplicación:

XML:

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <Preference android:key="about" android:title="@string/titleAbout" android:summary="@string/summaryAbout" /> <Preference android:key="labelTaxonomy" android:title="@string/titleLabelTaxonomy" android:summary="@string/summaryLabelTaxonomy" /> </PreferenceScreen>

INSTANTÁNEA:

Después de hacer clic en la Preference About (o Access Label Taxonomy), me gustaría abrir un intent de algún tipo (también podría ser un video o cualquier otra cosa ... los nombres son engañosos).


Si usa fragmentos, puede usar el método "findPreference ()" sobre la base de un fragmento de preferencias.

public class CustomActivity extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_custom); CustomFragment customFragment = (CustomFragment) getFragmentManager().findFragmentById(R.id.custom_fragment); EditTextPreference textPreference = (EditTextPreference) customFragment.findPreference("preference_key"); textPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { //open browser or intent here } }); } }


tal vez el enlace de documentos no está claro. Pero usar esa característica es muy simple. por ejemplo, puedes usar eso como una página de Twitter como esta

<PreferenceCategory android:title="Share" > <PreferenceScreen android:title="Twitter" android:summary="Follow me at Twitter"> <intent android:action="android.intent.action.VIEW" android:data="https://twitter.com/" /> </PreferenceScreen> </PreferenceCategory>

no necesita ningún código de Java. ¡Gracias a CommonsWare!