recyclerview make how dependency create cardview android android-recyclerview android-textview

android - make - recyclerview dependency



"Android: textIsSelectable=" true "no funciona para TextView en RecyclerView (4)

Sé que la configuración de android:textIsSelectable="true" en xml para TextView mostrará la ventana emergente de selección de texto nativo y he estado usando eso en mi aplicación. Pero lo que descubrí es que ya no funciona cuando intento establecer el mismo atributo en una vista adjunta a RecyclerView . Cada vez que intento seleccionar el texto, aparece el siguiente registro:

TextView: TextView does not support text selection. Action mode cancelled.

Y no sé por qué? Por qué funciona en otras pantallas y no con RecyclerView . Leí varias publicaciones -

TextView con Android: textIsSelectable = "true" no funciona en listview

textview textIsSelectable = "true" no funciona en Listview

android: textIsSelectable = "true" para TextView dentro de Listview no funciona

Pero luego me encontré con esta publicación -

Android: "TextView no es compatible con la selección de texto. Modo de acción cancelado"

Y la respuesta de @hungkk funcionó para mí. Su solución sugería que el ancho de TextView cambiara a wrap_content desde match_parent .

Sé que puedo hacer esto, pero mi pregunta es cómo resolvió el problema porque me parece extraño. Y también, ¿cuál es la solución si quiero mantener el ancho para match_parent ?

Cualquier entrada es bienvenida.


Si agrega android: descenddantFocusability = "blocksDescendants" en la vista recyclerview o listview, elimínelo. Y después de comprobar esto


Agregue su adaptador RecyclerView:

public ViewHolder(View itemView) { super(itemView); txtDate = (TextView) itemView.findViewById(R.id.txtDate); txtDate.setTextIsSelectable(true); }

funcionó para mí ...


En el diseño principal principal del atributo de adición recyclerview

android:descendantFocusability="beforeDescendants"

y luego en TextView of rowitem layout add

android:textIsSelectable="true"


Parece que hay muchos que tienen problemas con esto e indicaciones de que puede ser un error en el código de Android, pero no tengo ningún problema. Esto es lo que funciona para mí tanto para OnClickListener() como para la ventana emergente de selección nativa. (Probado en KitKat 4.4, Lollipop 5.1 y Nougat 7.1)

En el adaptador

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView textView; ImageView imageView; MyViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.my_text_view); imageView = (ImageView) itemView.findViewById(R.id.my_image_view); itemView.setOnClickListener(this); textView.setOnClickListener(this); } @Override public void onClick(View view) { // this shows ''my_text_view'' when the text is clicked or // ''my_item'' if elsewhere is clicked Log.d(TAG, "view = " + view.toString()); switch (view.getId()) { case R.id.my_item: break; case R.id.my_text_view: break; } } }

Y el diseño de mi artículo

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/my_item" > <ImageView android:layout_width="40dp" android:layout_height="40dp" android:background="@color/colorPrimary" android:id="@+id/my_image_view" /> <!-- this works for me with either "match_parent" or "wrap_content" for width --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="20dp" android:text="My text view" android:textIsSelectable="true" android:id="@+id/my_text_view" /> </LinearLayout>