执行getFilter时ViewHolder上的行为错误

时间:2018-06-14 11:02:58

标签: java android android-studio android-recyclerview

所以我想在stok <= limit时将颜色设置为红色,看起来正常onbindviewholder。但在执行搜索时,搜索删除时的第一行数据会变为红色。任何解决方案?first loadsearch the text with red oneafter searching, first data went red

Context context;
List<Obat> obatList;
List<Obat> obatTempList;
int limit, stok;


public ObatAdapter(Context context, List<Obat> TempList) {
    this.obatList = TempList;
    this.context = context;

}


@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.obat_list_row, parent, false);
    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

    Obat obat = obatList.get(position);

    holder.qty.setText(obat.getStok());
    holder.nama.setText(obat.getNama());
    holder.harga.setText("Rp. " + obat.getHarga());
    holder.satuan.setText(obat.getSatuan());

    limit = Integer.parseInt(obat.getLimit());
    stok = Integer.valueOf(obat.getStok());

        if (stok <= limit) {
            holder.onklik.setBackgroundColor(Color.parseColor("#f44242"));
        }




    holder.onklik.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(context, MainTouchMenu.class);
            i.putExtra("nama", obat.getNama().toString());
            i.putExtra("stok", obat.getStok().toString());
            i.putExtra("harga", obat.getHarga().toString());
            i.putExtra("satuan", obat.getSatuan().toString());
            i.putExtra("limit", obat.getLimit().toString());
            context.startActivity(i);

        }

    });
    holder.onklik.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Intent i = new Intent(context, MainHoldMenu.class);
            i.putExtra("nama", obat.getNama().toString());
            i.putExtra("stok", obat.getStok().toString());
            i.putExtra("harga", obat.getHarga().toString());
            i.putExtra("satuan", obat.getSatuan().toString());
            i.putExtra("limit", obat.getLimit().toString());
            context.startActivity(i);
            return false;
        }
    });

}

@Override
public int getItemCount() {

    return obatList.size();

}

@Override
public Filter getFilter() {
    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            final FilterResults oReturn = new FilterResults();
            final List<Obat> results = new ArrayList<Obat>();
            if (obatTempList == null) {
                obatTempList = obatList;
            }
            if (constraint != null) {
                if (obatTempList != null & obatTempList.size() > 0) {
                    for (final Obat obat : obatTempList) {
                        if (obat.getNama().toLowerCase().contains(constraint.toString())) {
                            results.add(obat);
                        }
                    }
                }
                oReturn.values = results;
            }
            return oReturn;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            obatList = (List<Obat>) results.values;
            notifyDataSetChanged();

        }
    };
}


public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView nama, harga, qty, satuan;
    RelativeLayout onklik;

    public MyViewHolder(View itemView) {
        super(itemView);
        nama = itemView.findViewById(R.id.nama);
        harga = itemView.findViewById(R.id.harga);
        qty = itemView.findViewById(R.id.qty);
        onklik = itemView.findViewById(R.id.onklik);
        satuan = itemView.findViewById(R.id.satuan);
    }
}

1 个答案:

答案 0 :(得分:0)

试试这种方式

 int statuscolor = 0;
        if (stok <= limit) {
            statuscolor = Color.parseColor("#f44242");
        }

然后在itemView背景中设置颜色

holder.itemView.setBackgroundColor(statuscolor);

我没有测试过此代码,请告诉我它是否有效