mLikeUsersRecyclerViewAdapter.updateData(mARTICLEs.get(pos).like_users);
我是先把更新完的数据作为参数传给updateData方法
在updateData方法中
this.like_users = like_users;
notifyDataSetChanged();
将数据赋给适配器中的容器,最后调用notifyDataSetChanged。
但是RecyclerView没有更新
我断点调试发现程序最后调用notifyDataSetChanged后
没有调用适配器的onBindViewHolder。
求教啊。。。
PS:我的RecyclerView是放在一个ListView的Item里面,方向为横向的
在线等。。。急
@bigname22 问题解决了,刚才灵基异动,想到了一个可能性,我这个RecyclerView是作为一个ListView的Item中的一部分的,之前数据改变时
我只是调用了RecyclerView的notifyDataser,但是没有更新外层ListView的,我试着调用了一下外层Listview的notifyDataSetChanged,然后就OK了。
mLikeUsersRecyclerViewAdapter.updateData(mARTICLEs.get(pos).like_users);
notifyDataSetChanged();
总之,谢谢各位了。
首先你要确定你的数据确确实实已经更改了。因为view的刷新是和里面的数据息息相关的。参与view绘制的数据更改之后,notify才会更新view。所以你要先
检测数据是否更改
刚才打断点发现可以进onBindViewHolder方法了。。。但是RecyclerView任然没有刷新
试试ListView也notifyDataSetChanged
因为没看到你的源码,so...
有可能是这个问题:this.like_users = like_users;,不能直接这么赋值的呢,
如果他是一个集合的话,试下下面这个方法:
this.like_users.clear();
this.like_user.addAll(list_user);
希望对你有用。
(如果成功的话,还有什么疑问的话再@我)
按照你的方法做了,RecyclerView还是没有更新......
public class LikeUsersRecyclerViewAdapter extends RecyclerView.Adapter {
private LayoutInflater mInflater;
private Context mContext;
private List<User2> like_users = new ArrayList<>();
private int width;
private int height;
private OnItemClickListener mOnItemClickListener;
private int article_pos;
public LikeUsersRecyclerViewAdapter(Context context, List<User2> users, int article_pos) {
mContext = context;
like_users.clear();
like_users.addAll(users);
// like_users = users;
mInflater = LayoutInflater.from(mContext);
width = ViewUtils.getDefaultDisplay(true,mContext);// 获取屏幕宽度
height = ViewUtils.getDefaultDisplay(false, mContext);//获取屏幕高度
this.article_pos = article_pos;
}
//更新RecyclerView的数据
public void updateData(List<User2> users) {
this.like_users.clear();
this.like_users.addAll(users);
notifyDataSetChanged();
}
/**
* 自定义一个Item点击借口
*/
public interface OnItemClickListener{
void OnItemClick(View view, int position, int article_pos);
}
@Override
public LikeUsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LikeUsersViewHolder holder = new LikeUsersViewHolder(mInflater.inflate(R.layout.item_like_users_recyclerview, parent, false));
return holder;
}
@Override
public int getItemCount() {
return like_users.size();
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
@Override
public void onBindViewHolder(final LikeUsersViewHolder holder, int position) {
if (like_users.get(position).avatar_img==null || like_users.get(position).avatar_img.isEmpty()){
holder.like_user.setImageResource(R.drawable.image_default_picture);
}else {
Utils.getImage(mContext, holder.like_user, like_users.get(position).avatar_img);
}
ViewUtils.setLayoutParams(holder.like_user, 0, 5, 0, 5, width/10, width/10);
if (mOnItemClickListener != null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = holder.getLayoutPosition();
mOnItemClickListener.OnItemClick(null ,pos, article_pos);
}
});
}
}
class LikeUsersViewHolder extends RecyclerView.ViewHolder{
CircleImageView like_user;
public LikeUsersViewHolder(View itemView) {
super(itemView);
like_user = (CircleImageView) itemView.findViewById(R.id.id_like_user);
}
}
}
这是RecyclerView的适配器
@bigname22