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.
- ¿Hay un equivalente no obsoleto?
- Si no, ¿qué pasa si lo uso de todos modos?
- ¿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!