如何仅刷新RecyclerView中的项目的Textview

时间:2015-08-24 08:46:55

标签: android android-recyclerview countdowntimer

我有一个RecyclerView,其中包含Product的列表,其中包含图片,文字和CountDownTimer,我调用了一个接口回调来自我的Product更改的每一秒我的Adapter课程。我只需刷新一个TextView我的布局,但notifyItemChanged调用onBindViewHolder并刷新我项目的所有数据。仅刷新项目的一个TextView的最佳方法是什么?

public void onBindViewHolder(final ViewHolderCustom holder, final int position) {
        final Product currentProduct = listProduct.get(position);
        holder.productBrand.setText(currentProduct.getBrand());
        holder.productName.setText(currentProduct.getName());
        holder.productPrice.setText(currentProduct.getPrice());
        holder.time.setText(String.valueOf(currentProduct.getTime()));
        String urlImg = currentProduct.getPicture();
        Log.v("adapter", "item " + position);
        if (!urlImg.equals("empty")) {

            imageLoader.get(urlImg, new ImageLoader.ImageListener(){...});
        }
        if (currentProduct.getId() == 1 && test == 0) {
            test = 1;
            currentProduct.Start_countDown(new Product.TimeCallBack() {
                @Override
                public void timeCallback(Product product) {
                    int index = listProduct.indexOf(product);
                    notifyItemChanged(index);
                }
            });
        }
    }

3 个答案:

答案 0 :(得分:1)

It will notify the particular position rather that whole list,  

  @Override
    public void timeCallback(Product product) {
      listProduct.set(position, product);
     notifyItemChanged(position);
    }

答案 1 :(得分:1)

如果要重绘整个项目,

notifyItemChanged(position);是正确的方法。如果你有一个大的背景图像,即使在缓存时,如果你在同一个项目上过快地调用notifyItemChanged,你会看到一些闪烁。

对于您的用例,您只需要重绘一个视图,这样您就可以直接更新它:

public void updateTime(ViewHolderCustom holder) {
    holder.time.setText(String.valueOf(currentProduct.getTime()));
    holder.time.invalidate();
}

答案 2 :(得分:0)

替换列表中特定索引的新数据,并通过notifyItemInserted通知适配器:

@Override
public void timeCallback(Product product) {
  listProduct.add(position, product);
  notifyItemInserted(position);
}