5

Ich möchte die Elemente in einem RecyclerView Touch-Feedback oder Wellen wenn gedrückt, aber sie scheinen nicht zu arbeiten, und ich denke, es ist wegen der Checkbox.RecyclerView Element zeigt keine Wellen/Touch-Feedback, wenn der Artikel eine Checkbox hat

Die Welligkeit wird nur angezeigt, wenn Sie lange drücken, aber ein einfacher Druck zeigt sie nicht an.

Darf mir jemand helfen, es zu reparieren? Danke im Voraus.

PD: Ich habe eine ListView verwendet, und das Element Layout Eltern war ein LinearLayout. Die Wellen funktionierten gut. Nach dem Wechsel zu RecyclerView funktionieren die Welligkeiten der Elemente nicht. Ich habe es mit dem LinearLayout nochmal versucht, funktioniert aber immer noch nicht.

Hier ist die Layout-Datei

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

Hinzufügen android: demcendantFocusability = "blocksDescendants" in das Wurzelelement Ihres Artikels. –

+0

@GabrielMariotti bereits getan. Funktioniert immer noch nicht. Aktualisierte Layoutdatei –

+0

Ich bin nicht ganz sicher, aber das könnte passieren, weil die Ansichten in der Viewgroup Ihren Welleneffekt abdecken. Es ist also da, aber Sie können es nicht sehen. Also habe ich am Ende eine extra einfache Ansicht (mit Match_Parent Breite und Höhe) speziell für Ripple hinzugefügt. Vielleicht möchten Sie es versuchen. –

Antwort

8

In Ihrer onClick-Methode verwenden (in Ihrem Rückruf vorausgesetzt), stellen Sie sicher, dass Sie notifyDataSetChanged() nach notifyItemChanged(position) nicht Ruf tun.

notifyDataSetChanged() wird mit diesen Standard-Ripple- -Effekten in Konflikt geraten.

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

     ... awesome item onClick code ... 

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

Sie verwenden android:background="?android:attr/selectableItemBackground" aber Sie sollten android:foreground="?android:attr/selectableItemBackground"

+0

Bereits versucht. Funktioniert immer noch nicht. –

+0

Ich habe gerade versucht, Ihr Layout in Test-Projekt und alles funktioniert gut - https://drive.google.com/file/d/0B5KouoPaI5qqQWFRenVpRkRlQ3M/view?usp=sharing – curioushikhov

+0

@curioshikhov Ich habe das gleiche Layout versucht, hat noch nichts ... Kann ich dich irgendwo kontaktieren und Hilfe holen? Ich kann die volle Quelle nicht teilen, weil es privat ist, aber wenn du bereit bist zu helfen, kann ich es tun, danke im Voraus. –

1

Ich glaube, Sie suchen Ripple effect.I können Sie grundlegende Idee geben, erstellen Sie einfach eine XML-Datei (ripple.xml) in ziehbar & schreiben diesen Code innerhalb

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

& schreibe einfach zwei Zeilen in deine andere XML-Datei, in der du RecyclerView-Elemente deklariert hast.

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

wie in meinem Fall habe ich nur Textview und Tag in Elternteil habe ich mich erklären diese beiden Linien

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

schließlich das Ergebnis: enter image description here

Sehen Sie dieses Video

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