2017-05-25 133 views
1

在RecyclerView中使用一个网格布局,我观察到每当我在屏幕上移动4-5个项目时项目会改变位置,我实现了一个onclick,以便它进入另一个页面RecyclerView GridLayoutManager随机移动位置的项目

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

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()); 
     } 
    }); 
} 
+0

删除了if语句并且没有更改,是否有助于我使用realm作为其数据库 –

相关问题