2014-11-16 12 views
9

Tôi đã googling xung quanh để xác định cách tôi nhận được hoạt ảnh nhấp chuột cho các mục trong RecycleView, một cái gì đó như "nhấp/chạm phản hồi".Cách tạo hoạt ảnh nhấp cho các mục trong RecycleView

Tôi có thể xem các mục của mình trong chế độ xem, nhưng không có phản ứng thực nào khi tôi nhấn/nhấp vào chúng. Tôi có một phiên bản thu nhỏ quy mô của dự án này:

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

Có ai biết làm thế nào để có được bấm hình ảnh động cho các mục trong một RecycleView?

Trả lời

33

Điều này rất dễ thực hiện. Trong tệp bố cục của chế độ xem bạn đang tăng thêm cho mỗi hàng trong số RecycleView, hãy đặt chế độ xem cấp cao nhất là cả hai có thể nhấp và có thể đặt tiêu điểm. Sau đó, đặt nền của chế độ xem đó thành ?android:attr/selectableItemBackground. Dựa trên dự án GitHub bạn đã đăng, có vẻ như lượt xem bạn đang tăng cho mỗi hàng là item_demo_01.xml. Vì vậy, bố cục đó sẽ trông giống như sau:

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

Cảm ơn Nathan, tôi sẽ xem xét điều này càng sớm càng tốt. Điều này có vẻ ít cồng kềnh và cồng kềnh, vì vậy tôi sẽ thử điều đó và cho bạn biết ngay =) – Ted

+1

Làm việc như một sự quyến rũ =) – Ted

+0

@Ted vui khi nghe nó! –

1

Bạn có thể thực hiện việc này bằng cách sử dụng trình xem trong lớp RecyclerAdapter của mình.

//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..... 

Trong phương thức onBindViewHolder, bạn có thể triển khai logic hoạt ảnh cho chế độ xem đó và chuyển nó vào hoạt động hoặc đoạn của bạn. Chỉ cần tạo giao diện tùy chỉnh cho bộ điều hợp recyclerview của bạn và tạo một phương thức như setMyOnItemClickListener(new MyOnItemClickListener). Sau đó, khi một mục được nhấp, hãy thông báo cho giao diện tùy chỉnh của bạn và thực hiện một số thao tác với nhấp chuột.

+0

Thx. Nhưng tôi vẫn không thấy/làm thế nào để làm điều đó. Và đây thực sự là cách để làm điều đó? Nó có vẻ rất cồng kềnh về ý tưởng với Material Design là nó phải dễ dàng hơn và là một phần tự nhiên của sự phát triển, nhưng cách tiếp cận này có vẻ là một hack? Hay tôi sai ở đây? – Ted

+0

Nó là loại hack nhưng nó là một trong số ít cách để làm như vậy. Lớp RecyclerAdapter cơ sở không có phương thức "onItemClick" như các khung nhìn danh sách và khung nhìn lưới làm. Một chế độ xem tái chế có nghĩa là siêu linh hoạt và vì đó là trường hợp nhiều điều về nó và bộ điều hợp của nó là xương trần để cho phép bạn làm những gì bạn muốn làm nhà phát triển. Thật không may, bây giờ rất khó để chuyển sang các kiểu bố trí khác nhau nhưng điều này hy vọng sẽ thay đổi trong tương lai. –

+0

Thx cho đầu vào Paul =) – Ted

Các vấn đề liên quan