Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo adjuntar GestureDetector a una ListPreference?

El desafío de adjuntar un GestureDetector a una ListPreference es doble:

  1. Conseguir un identificador a un ListPreference que sólo se define en un preferences.xml (es decir, no instanciado en código Java).
  2. ListPreference no es una subclase View ni Activity.

¿Es posible adjuntar un GestureDetector a ListPreference ?

Si es así, ¿cómo se puede hacer esto? ¿Dónde escribiría el código para instanciar GestureDetector e implementar el oyente?

3 Solutions collect form web for “Cómo adjuntar GestureDetector a una ListPreference?”

A menos que no entienda bien la pregunta correctamente, la respuesta es probablemente más simple de lo que usted podría pensar. El código fuente de ListPreferece enseña que es poco más que un contenedor alrededor de un AlertDialog que muestra sus diversas opciones en un ListView . Ahora, AlertDialog realmente le permite obtener una manija en el ListView que envuelve, que es probablemente todo lo que necesita.

En uno de los comentarios indicó que, en esta etapa, todo lo que le interesa es detectar una pulsación prolongada en cualquier elemento de la lista. Así que en lugar de contestar que uniendo un GestureDetector , simplemente OnItemLongClickListener un OnItemLongClickListener .

 public class ListPreferenceActivity extends PreferenceActivity implements OnPreferenceClickListener { private ListPreference mListPreference; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.list_prefs); mListPreference = (ListPreference) findPreference("pref_list"); mListPreference.setOnPreferenceClickListener(this); } @Override public boolean onPreferenceClick(Preference preference) { AlertDialog dialog = (AlertDialog) mListPreference.getDialog(); dialog.getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) { Toast.makeText(getApplicationContext(), "Long click on index " + position + ": " + parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show(); return false; } }); return false; } } 

El resultado (que el brindis en la visualización de un clic largo):

Introduzca aquí la descripción de la imagen

Con una referencia a ListView , también podría adjuntar un OnTouchListener , GestureDetector , etc Hasta usted para ir de aquí.

Como sugirió @TronicZomB, esto no es posible directamente .

Puede solucionar esto creando su propia clase derivada ListPreference, obteniendo su vista en el onBindDialogView () heredado.

Recuerde sin embargo que este último es complicado porque onBindDialogView () sólo se llama si onCreateDialogView () no devuelve null, y esto sólo puede ocurrir si crea su propia vista personalizada para YourListPreference.

La forma recomendada de hacerlo es crear una preferencia personalizada .

Una vez hecho esto, tiene una referencia a la vista de YourListPreference, que es obligatoria para adjuntar GestureDetector porque uno de los pasos requiere setOnTouchListener () en la vista.

He fijado un GestrueDetector a ScrollView usando setOnTouchListener previamente y buscado un método similar para ListPreference, sin embargo desde que el ListPreference no contiene tal método, no creo que esto sea posible.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.