5

Desidero che gli elementi in un RecyclerView abbiano feedback tattili o increspature quando premuti, ma sembrano non funzionare, e penso che sia dovuto alla casella di controllo.RecyclerLa voce non mostra increspature/feedback tattile quando l'articolo ha una casella di controllo

L'ondulazione viene visualizzata solo quando si preme a lungo, ma una semplice pressione non lo mostra.

Qualcuno potrebbe aiutarmi a risolverlo? Grazie in anticipo.

PD: stavo usando un ListView e il genitore del layout dell'articolo era un LinearLayout. Le increspature stavano funzionando bene. Dopo essere passati a RecyclerView, le increspature degli oggetti non funzionano. Ho provato di nuovo con LinearLayout, ma ancora non funziona.

Ecco il file di layout

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    android:id="@+id/requestCard" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:clickable="true" 
    android:focusable="true" 
    android:descendantFocusability="blocksDescendants" 
    android:orientation="horizontal"> 

    <ImageView 
     android:id="@+id/imgIcon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:adjustViewBounds="true" 
     android:maxHeight="64dp" 
     android:maxWidth="64dp" 
     android:padding="@dimen/lists_padding" 
     android:src="@drawable/ic_launcher" 
     tools:ignore="ContentDescription"/> 

    <TextView 
     android:id="@+id/txtName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_toEndOf="@+id/imgIcon" 
     android:layout_toRightOf="@+id/imgIcon" 
     android:ellipsize="end" 
     android:maxLength="@integer/request_text_length" 
     android:maxLines="1" 
     android:padding="@dimen/lists_padding" 
     android:textSize="@dimen/abc_text_size_large_material" 
     tools:text="App Name"/> 

    <CheckBox 
     android:id="@+id/chkSelected" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:clickable="false" 
     android:padding="@dimen/lists_padding"/> 

</RelativeLayout> 
+0

Aggiungi android: descendantFocusability = "blocksDescendants" in l'elemento principale del tuo articolo. –

+0

@GabrieleMariotti l'ha già fatto. Continua a non funzionare. File di layout aggiornato –

+0

Non ne sono del tutto sicuro, ma ciò potrebbe accadere perché le viste nel gruppo di vista coprono l'effetto a catena. Quindi è lì, ma non puoi vederlo. Così ho finito per aggiungere una vista extra semplice (con larghezza e altezza match_parent) appositamente per il ripple. Potresti provare. –

risposta

8

nel metodo onClick (supponendo che nel vostro callback), assicurarsi che non si chiamata notifyDataSetChanged() dopo notifyItemChanged(position).

notifyDataSetChanged() è in conflitto con gli effetti di ripple predefiniti .

new recyclerAdapter.ClickListener() { 
    @Override 
    public void onClick(int position) { 

     ... awesome item onClick code ... 

     notifyItemChanged(position); 
     //notifyDataSetChanged(); <//--- Causes the no ripple bug 
    } 
}; 
0

Si utilizza android:background="?android:attr/selectableItemBackground" ma si dovrebbe usare android:foreground="?android:attr/selectableItemBackground"

+0

Già provato. Continua a non funzionare. –

+0

Ho appena provato il layout nel progetto di test e tutto funziona bene - https://drive.google.com/file/d/0B5KouoPaI5qqQWFRenVpRkRlQ3M/view?usp=sharing – curioushikhov

+0

@curioshikhov Ho provato lo stesso layout, non ho ancora ottenuto nulla ... C'è un posto dove potrei contattarti e ricevere il tuo aiuto? Non posso condividere l'intera fonte perché è privato, ma se sei disposto ad aiutare posso farlo, grazie in anticipo. –

1

Penso che si sta cercando effect.I ondulazione può darvi un'idea di base, basta creare un file xml (ripple.xml) in drawable & scrivere questo codice all'interno

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="?attr/colorControlHighlight"> 
    <item 
     android:id="@android:id/mask" 
     android:drawable="@android:color/white" 
     > 

    </item> 
</ripple> 

& scrivi semplicemente due righe nel tuo altro file xml in cui hai dichiarato gli elementi del recyclerview.

android:background="@drawable/ripple" 
android:clickable="true" 

come nel mio caso sto avendo solo TextView e nel tag principale che sto dichiarando queste due linee

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/ripple" 
    android:clickable="true" 
    > 

<TextView 
    android:id="@+id/textView_Username" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="30sp" 
    android:textColor="@color/colorPrimary" 
    android:layout_marginLeft="10dp" 
    android:layout_marginTop="10dp" 
    /> 
</LinearLayout> 

Infine il risultato: enter image description here

vedere questo video

https://www.youtube.com/watch?v=qvVkDb7DqCk

Problemi correlati