2014-11-16 13 views
9

Przeszukałem okolice, aby ustalić, w jaki sposób uzyskać animację kliknięcia dla elementów w oknie RecycleView, coś w rodzaju "informacji zwrotnych kliknięcia/dotyku".Jak utworzyć animację kliknięcia dla elementów w RecycleView?

Widzę moje przedmioty w widoku, ale nie ma prawdziwej reakcji, kiedy naciskam/klikam na nich. Mam downsized wersji tego projektu:

https://github.com/writtmeyer/recyclerviewdemo/tree/master/app/src/main/java/com/grokkingandroid/samplesapp/samples/recyclerviewdemo

czy ktoś wie jak zdobyć kliknij animacje dla elementów w RecycleView?

Odpowiedz

33

Jest to bardzo łatwe do zrobienia. W pliku układu widoku nadmuchiwanego dla każdego wiersza pliku RecycleView ustaw widok najwyższego poziomu tak, aby był możliwy do kliknięcia i ustawiania ostrości. Następnie ustaw tło tego widoku na ?android:attr/selectableItemBackground. Na podstawie opublikowanego przez Ciebie projektu GitHub wygląda na to, że widok, który napełniasz dla każdego wiersza, to item_demo_01.xml. Ten układ będzie teraz wyglądał mniej więcej tak:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/container_list_item" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    android:focusable="true" 
    android:background="?android:attr/selectableItemBackground"> 

    <include layout="@layout/common_item_layout" /> 

</RelativeLayout> 
+0

Dzięki Nathan, zagłębię się w to tak szybko, jak to możliwe. Wydaje się, że jest to mniej kłopotliwe i nadęte, więc wypróbuję to i dam ci znać krótko =) – Ted

+1

Działa jak urok =) – Ted

+0

@ Cieszę się, że mogę to usłyszeć! –

1

Możesz tego dokonać za pomocą viewholder w klasie RecyclerAdapter.

//this goes in your recyclerView adapter.... 
    /** 
    * View holder for workouts 
    */ 
    public static class MyViewHolder extends RecyclerView.ViewHolder { 
     // each data item is just a string in this case 
     public TextView mTitleView; 
     public TextView mTView1; 
     public View homeView; 

     public MyViewHolder(View itemLayoutView) { 
      super(itemLayoutView); 
      this.homeView = itemLayoutView; 
      this.mTitleView = (TextView) itemLayoutView.findViewById(R.id.workoutItemTitleText); 
      this.mTView1 = (TextView) itemLayoutView.findViewById(R.id.workoutItemWorkoutSets); 
      homeView.setOnClickListener(new ON) 
     } 
    } 

    //other code..... 

    @Override 
    public void onBindViewHolder(WorkoutViewHolder viewHolder, int position) { 
     viewHolder.mTView1.setText(""); 
     viewHolder.mTitleView.setText(""); 
     //pass the position to the view in the onclick listener 
     viewHolder.homeView.setId(position); 
     viewHolder.homeView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //this list item has been clicked, do something. maybe use an interface or something to notify your activity/fragment. 
      } 
     }); 
    } 

//the rest of your code..... 

W metodzie onBindViewHolder można zaimplementować logiki animacji dla tego widoku i przekazać, że onclick do swojej działalności lub fragmentu. Po prostu utwórz niestandardowy interfejs dla adaptera recyclerview i wykonaj taką metodę, jak setMyOnItemClickListener(new MyOnItemClickListener). Następnie, po kliknięciu elementu, powiadom niestandardowy interfejs i wykonaj działanie za pomocą kliknięcia.

+0

Thx. Ale wciąż nie widzę/nie wiem jak to zrobić. I czy to naprawdę jest sposób na zrobienie tego? Wydaje się to bardzo kłopotliwe, ponieważ idea Material Design jest taka, że ​​powinna być łatwiejsza i naturalna część rozwoju, ale to podejście wydaje się być hackerem? Czy ja tu się mylę? – Ted

+0

To rodzaj hackowania, ale jest to jeden z nielicznych sposobów na zrobienie tego. Podstawowa klasa RecyclerAdapter nie ma metody "onItemClick", takiej jak widoki listy i widoki siatki. Widok recyklera ma być bardzo elastyczny, a ponieważ tak jest, wiele rzeczy na ten temat i jego adapter to szkielety, które pozwalają ci robić to, co chcesz jako programista. Niestety bardzo trudno jest teraz przejść do różnych typów układów, ale mam nadzieję, że zmieni się to w przyszłości. –

+0

Thx za wejście Paul =) – Ted

Powiązane problemy