Tôi đã chơi xung quanh với RecyclerView
một chút. Có cách nào dễ dàng để đặt OnClickListener
cho các mặt hàng trong RecyclerView
không? Tôi đã thử triển khai nó trong ViewHolder
. Sự kiện onClick chưa bao giờ được kích hoạt.Những thách thức trong RecyclerView của Android L
Và tôi đã sử dụng notifyItemInserted(position)
để thêm giá trị mới vào RecyclerView
. Giao diện người dùng không được làm mới tự động. Cần phải kéo lên và xuống để làm mới. Nhưng khi tôi gọi notifyDatasetChanged(..)
, nó là ok.
Tôi đã áp dụng DefaultItemAnimator
đến RecyclerView
. Nhưng, không thấy bất kỳ hoạt ảnh nào khi mục mới được thêm vào.
Xin cảm ơn trước vì bất kỳ ý tưởng nào.
Đây là thành phần Android L đầu tiên tôi đã thử nghiệm và tôi đang mắc kẹt ở đó.
Đây là lớp Adaptor của tôi:
public class AdapterRecyclerView extends RecyclerView.Adapter<AdapterRecyclerView.MyViewHolder> {
private List<String> arrExperiences;
//Provide a reference to the type of views that you are using - Custom ViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView tvExperienceTitle;
public TextView tvExperienceDesc;
public MyViewHolder(RelativeLayout itemView) {
super(itemView);
tvExperienceTitle = (TextView) itemView.findViewById(R.id.tv_experience_title);
tvExperienceDesc = (TextView) itemView.findViewById(R.id.tv_experience_desc);
}
}
//Provide a suitable constructor : depending on the kind of dataset.
public AdapterRecyclerView(List<String> arrExperiences){
this.arrExperiences = arrExperiences;
}
//Create new view : invoke by a Layout Manager
@Override
public AdapterRecyclerView.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RelativeLayout view = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item_recycler, parent, false);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(AdapterRecyclerView.MyViewHolder viewHolder, int position) {
//get element from your dataset at this position.
//replace the content of the view with this element.
viewHolder.tvExperienceTitle.setText(arrExperiences.get(position));
}
@Override
public int getItemCount() {
return arrExperiences.size();
}
public void addExperience(String experience, int position){
arrExperiences.add(position, experience);
notifyItemInserted(position);
//notifyDataSetChanged();
}
public void removeExperience(){
int index = (int) (Math.random() * arrExperiences.size());
arrExperiences.remove(index);
notifyItemRemoved(index);
//notifyDataSetChanged();
}
}
Bạn có thể thử https://gist.github.com/grantland/cd70814fe4ac369e3e92 – CommonsWare
này được chính xác tôi đã nói ở trên. Anh chàng đó đang triển khai OnClickListener từ ViewHolder. Tôi đã thử nó. Nhưng, sự kiện onClick chưa bao giờ được kích hoạt. –
Mã của anh ta gọi là 'setOnClickListener() '. Của bạn hiển thị ở trên không. – CommonsWare