我有一个列表,当一个项目是高级版但尚未购买时,我将在ImageView中应用过滤器。
问题是,当我启动应用程序时一切正常,但是当我开始滚动时,其他人也会开始获得灰色过滤器。然后过滤器在每条线上。
@Override
public void onBindViewHolder(ThemeViewHolder holder, int position) {
Tema t = temaList.get(position);
boolean comprado = bp.isPurchased(t.getSkuTema());
holder.temaTexto.setText(t.getNomeTema());
holder.temaIcone.setImageResource(t.getIconeTema());
if(t.getIsPremium() != 0){
Log.d("Adapter", "Posição: "+ position + " is Premium: " + t.getIsPremium());
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
holder.temaIcone.setColorFilter(filter);
}
}
只有位置< 6导致“isPremium = 0”,我有10个项目。
我的日志
01-24 14:22:45.048 17282-17282/llamaze.com.br.whattodraw D/Adapter: Posição: 7 is Premium: 1
01-24 14:22:45.071 17282-17282/llamaze.com.br.whattodraw D/Adapter: Posição: 8 is Premium: 1
01-24 14:22:45.117 17282-17282/llamaze.com.br.whattodraw D/Adapter: Posição: 9 is Premium: 1
我做错了什么?
答案 0 :(得分:1)
这样调用RecyclerView
是因为它回收其观点。
也就是说,在滚动时, premium 视图也会被重复用于非高级行。
您需要做的就是将else
分支实施到您删除过滤器的if
语句中,如果它是非高级。