2016-04-22 27 views
20

So che l'impostazione android:textIsSelectable="true" in xml per il TextView mostrerà il popup di selezione del testo nativo e l'ho usato nella mia applicazione. Ma quello che ho trovato non funziona più quando si tenta di impostare lo stesso attributo in una vista attaccato al RecyclerView ogni volta che provo per selezionare il testo viene visualizzato il seguente registro -."android: textIsSelectable =" true "non funziona per TextView in RecyclerView

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

E io non so perché? Perché funziona su altri schermi e non con lo RecyclerView. Ho letto più post -

TextView with android:textIsSelectable="true" not working in listview

textview textIsSelectable="true" not working in Listview

android:textIsSelectable="true" for TextView inside Listview does not work

Ma poi ho incontrato questo post -

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

E la risposta da @hungkk ha lavorato per me. La sua soluzione suggeriva che la larghezza TextView passasse a wrap_content da match_parent.

So che posso farlo ma la mia domanda è come questo ha risolto il problema perché mi sembra strano. E inoltre, qual è la soluzione se voglio mantenere la larghezza a match_parent.

Qualsiasi input è benvenuto.

+1

Cosa stai facendo con la selezione? (Marty o Shadab). Non ho alcun problema nell'utilizzare 'View.OnClickListener()' per 'match_parent' o' wrap_content'. – Gary99

+0

È strano, ma in alcuni post ho letto che quando la vista del riciclatore riutilizza la cella, disattiva la funzione di testo selezionabile se TextView è impostato su match_parent. Hai provato a impostare 'android: inputType =" textMultiLine "'' invece di 'android: textIsSelectable =" true "' come soluzione alternativa? – fmaccaroni

risposta

2

Se si aggiunge android: descendantFocusability = "blocksDescendants" in recyclerview o listview, quindi rimuoverlo. E dopo il controllo questo

0

Sembra che ce ne siano molti che hanno problemi con questo e indica che potrebbe trattarsi di un bug nel codice di Android ma non ho un problema. Questo è ciò che funziona per me sia per un OnClickListener() sia per il popup di selezione nativo. (Testato su KitKat 4.4, Lollipop 5.1 e Torrone 7.1)

l'adattatore

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; 
     } 
    } 
} 

E il mio layout voce

<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> 
0

Nel layout principale-madre di recyclerview aggiungere attributo

android:descendantFocusability="beforeDescendants"

e quindi in TextView di layout rowitem aggiungere

android:textIsSelectable="true" 
0

Aggiungere l'adattatore RecyclerView:

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

sua ha lavorato per me ..