比较onBindViewHolder中的项目

时间:2016-01-24 19:29:57

标签: android android-recyclerview

我有一个列表,当一个项目是高级版但尚未购买时,我将在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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

这样调用RecyclerView是因为它回收其观点。

也就是说,在滚动时, premium 视图也会被重复用于非高级行。

您需要做的就是将else分支实施到您删除过滤器的if语句中,如果它是非高级