Usando onClick en TextView con texto seleccionable – cómo evitar doble clic?

Esto es tan extraño, pero si pones un onClickListener en un TextView (o EditText no editable) que tiene android:textIsSelectable="true" – no necesita un toque, sino dos. Lo comprobé en 3 teléfonos y todos ellos realizan onClick sólo después del segundo toque.

Por supuesto, si haces focusable="false" o android:textIsSelectable="false" funciona desde el primer toque, pero la selección de texto no funciona.

Por favor, ayúdame con ese tema

4 Solutions collect form web for “Usando onClick en TextView con texto seleccionable – cómo evitar doble clic?”

Tuve el mismo problema y es difícil preguntar y buscar una resolución.

Aquí hay dos cosas que me di cuenta, además de la doble toque comportamiento:

  • Si realmente doble toque (rápidamente) en un TextView con textIsSelectable , selecciona la palabra que pulsó, incluso cuando el foco está en otra cosa, lo que significa que la vista de alguna manera registró el primer toque también.
  • Si pulsa mucho mientras el foco está en otro lugar, funciona y comienza el modo de acción de selección como si ya estuviera enfocado

He aquí cómo he logrado que funcione. No es hermoso, pero todo funciona bien hasta ahora: en el XML sólo se necesita agregar textIsSelectable , no hay otros textIsSelectable / focusableInTouchMode / clickable / enabled necesarios; Entonces usted necesita dos oyentes, uno es el onClick existente que funciona, pero necesita una toma doble y el otro es un onFocusChange donde se maneja el primer toque excepcional :

 hint = (TextView)view.findViewById(R.id.hint); hint.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { handleHintClick(); } }); hint.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { handleHintClick(); } } }); 

He aquí una solución alternativa en una pregunta relacionada que no me gusta y ni siquiera intento: envolver el TextView en un FrameLayout y añadir el oyente a eso.

Aquí hay otra pregunta relacionada que tiene más soluciones.

Establecer en XML a su TextView

 android:textIsSelectable="true" 

Después de que el conjunto onTouchListener a su TextView y en ellos hacer esto:

 if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) view.requestFocus(); 

Se establece el foco para cada toque en TextView. Después de todo, establezca onClickListener a su TextView.

Tengo el mismo problema con un sostenedor para mi RecyclerView.Adapter de encargo. Así que, lo corté para usted si usted necesita:

 class RollHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnTouchListener { private TextView textView; RollHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.text_view); textView.setOnClickListener(this); textView.setOnTouchListener(this); } @Override //Слушатель нажатия public void onClick(View view) { switch (view.getId()){ case R.id.text_view: //Do here that you need break; } } @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (view.getId()){ case R.id.text_view: if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) view.requestFocus(); break; }; return false; } } 
 android:longClickable="false" android:clickable="false" 

Deshabilite el botón con setEnabled(false) hasta que sea seguro para el usuario hacer clic de nuevo.

Esto puede ser útil para usted

Prueba esto.

Uso en archivo XML

  android:onclick"your Name"//for example I used "onImageListClick" public void onImageListClick(View view) { //do your task. //Intent intent = new Intent(this, ImageListActivity.class); //intent.putExtra(Extra.IMAGES, IMAGES); //startActivity(intent); } 

o

  txtboxname.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { ////do you task. } }); 
  • Desplazamiento horizontal del texto en Android
  • Fondo personalizado de la ventana emergente del error
  • Cómo obtener las coordenadas XY y el tamaño de píxeles de un TextView?
  • Cómo eliminar la fila de la tabla en el diseño de la tabla en android
  • Obtener una matriz de char desde el usuario sin utilizar String
  • Android Get Country Emoji Flag utilizando Locale
  • El salto de línea en Android agrega relleno
  • ¿Cómo puedo cambiar la parte del color de un TextView?
  • Android enlace activo de url en TextView
  • Cómo obtener rápidamente el ancho y la altura de TextView utilizando Paint.getTextBounds ()?
  • Sobreponiendo problema en Android TextView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.