在RecyclerView中使用gridlayout我观察到每当我在屏幕上出现4-5个项目时,项目会改变位置,我已经实现了onclick以便它会进入另一个页面
public interface ItemClickCallback {
void onItemClick(int p, String id);
}
public void setItemClickCallback(final ItemClickCallback itemClickCallback) {
this.itemClickCallback = itemClickCallback;
}
public nAdapter(RealmResults<Nitem> listData, Context c) {
inflater = LayoutInflater.from(c);
this.listData = listData;
}
@Override
public nHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.n_item, parent, false);
return new nHolder(view);
}
@Override
public void onBindViewHolder(nAdapter.nHolder holder, final int position) {
final Nitem item = (Nitem) listData.get(position);
holder.title.setPadding(7,7,7,7);
if(holder.title.toString().isEmpty()) {
holder.title.setText(item.getNotes());
}
holder.container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickCallback.onItemClick(position,item.getId());
}
});
}
答案 0 :(得分:0)
RecyclerView中的视图可以重复使用。
这意味着当您向上或向下滚动列表时,不是创建全新的视图,而是重复使用先前创建的视图。
隐含地,它强制您一次又一次地更新视图内容(不仅在您期望它为空时)。
可能你有错位标题的问题?之所以会发生这种情况,是因为您只设置标题,当它为空时(仅对少数尚未缓存的视图才有效)。
只需删除if
条件就可以了。
@Override
public void onBindViewHolder(nAdapter.nHolder holder, final int position) {
final Nitem item = (Nitem) listData.get(position);
holder.title.setPadding(7,7,7,7);
// Always update view's data.
holder.title.setText(item.getNotes());
holder.container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickCallback.onItemClick(position,item.getId());
}
});
}