其他分享
首页 > 其他分享> > android – 如何仅刷新RecyclerView中项目的Textview

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

作者:互联网

我有一个包含Image,Text和CountDownTimer的Product列表的RecyclerView,我将每个秒的接口CallBack调用从我的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);
                }
            });
        }
    }

解决方法:

notifyItemChanged(位置);如果要重绘整个项目,这是正确的方法.如果背景有大图像,即使在缓存时,如果在同一项目上过快地调用notifyItemChanged,也会看到一些闪烁.

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

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

标签:android,android-recyclerview,countdowntimer
来源: https://codeday.me/bug/20190706/1399125.html