2014-07-25 17 views
23

Có thể câu hỏi này đã được hỏi trước đây, nhưng tôi không thể tìm thấy câu trả lời chính xác. Tôi đã triển khai tiện ích RecyclerView làm danh sách trong ứng dụng thử nghiệm L của tôi và tôi muốn nhận được 'hiệu ứng vật chất' khi bạn nhấp vào một mục tạo danh sách. Tôi thực hiện một onClickListener trong việc tạo ViewHolder tôi và thiết lập các thuộc tínhHiệu ứng RecyclerView onItemClick trong L

android:background="?android:attr/selectableItemBackground"

làm nền để bố trí danh mục của tôi (cho phụ huynh).

Nhưng không cách nào trong số này hoạt động. Khi tôi bấm vào các mục NOTHING xảy ra '. Không có hiệu lực, holo, vật liệu, không ai ... Xin vui lòng chỉ ra nếu tôi làm điều gì sai ở đây ... Thx

Trả lời

37

Tôi đã phạm sai lầm ngớ ngẩn và không đưa

android:clickable="true" 
android:focusable="true" 

vào danh sách của tôi bố cục mục. Tôi nghĩ rằng điều này là không cần thiết trước L, nhưng nó không quan trọng bởi vì đó là vấn đề trong trường hợp này.

+0

Bạn có biết cách thêm đường viền dưới cùng cho mục không? Tất cả các phương pháp tôi tìm thấy đang sử dụng nền của bố cục gốc, nhưng tôi không thể sử dụng nó vì nó đã được thiết lập cho hiệu ứng onclick. – Link14

+1

@ Link14 bạn có thể thực hiện trang trí mục (bạn có thể gọi addItemDecoration() cho đối tượng recyclerView). Để thực hiện trang trí mong muốn (border, hoặc sth else), bạn cần thêm lớp mở rộng RecyclerView.ItemDecoration vào dự án của bạn và sửa đổi nó theo nhu cầu của bạn. Bạn sẽ sử dụng lớp này làm đối số trong addItemDecoration(). Có nhiều giải thích thêm về điều này trong chủ đề này http://stackoverflow.com/questions/24618829/how-to-add-dividers-and-spaces-between-items-in-recyclerview. RecyclerView.ItemDecoration lớp có sẵn ở đây https://gist.github.com/alexfu/0f464fc3742f134ccd1e – Sandra

+0

điều này không làm việc cho tôi vì một số lý do ... – Micro

41

Câu trả lời của Sandra không phù hợp với tôi. Tôi cần một thuộc tính khác trong bố cục mục danh sách của mình:

android:clickable="true" 
android:focusable="true" 
android:background="?android:attr/selectableItemBackground" 

Lưu ý: nếu bạn gặp lỗi khi dán ở dòng cuối cùng thì ứng dụng Android của bạn được đặt trên phiên bản 10 trở xuống. Chỉ cần nhấp chuột phải vào lỗi trong Android Studio và thiết lập nó để nó cũng sẽ tạo phiên bản v11 của bố cục của bạn. Sau đó, trong bố cục ban đầu, hãy đảm bảo xóa

android:background="?android:attr/selectableItemBackground"` 

Điều này là do hoạt ảnh không được hỗ trợ trong phiên bản v10 của android trở xuống. Với hai tệp bố cục được thiết lập, hoạt ảnh sẽ hiển thị chính xác trong phiên bản v11 + của Android và tất nhiên nó sẽ không được hiển thị ở các phiên bản thấp hơn.

(hoặc chỉ cần tăng phiên bản minSdkVersion của ứng dụng của bạn để cao hơn 10)

+2

Tôi không đặt android: background = "? Android: attr/selectableItemBackground" 'vào câu trả lời cho câu hỏi của tôi, bởi vì tôi đã giải thích trong câu hỏi của mình, rằng tôi đã có nó được thực hiện trong mã ..xin lỗi cho sự nhầm lẫn – Sandra

+2

setFocusable (true) là không cần thiết ở đây và thực sự quá mức miễn là mục có thể nhận được vào sate của 'mục tập trung' và có nền màu xám. Hiệu ứng gợn sóng sẽ hoạt động ngay cả khi không thiết lập thuộc tính này –

4
android:clickable="true" 
android:focusable="true" 

những dòng này không còn sử dụng. chỉ cần thêm

android:background="?android:attr/selectableItemBackground" 

làm việc để có hiệu ứng nhấp.

+0

Đây có thể là trường hợp ngay bây giờ. Nhưng tại thời điểm này câu hỏi này đã được hỏi tôi đã cố gắng với L xem trước và hiệu ứng nhấp chuột đã biến mất :) – Sandra

+0

Tôi hiểu. Tôi đã chỉnh sửa câu trả lời của mình bằng "không còn" =) –

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