ListAdapter

一個標(biāo)準(zhǔn)的創(chuàng)建方法:
Object為你要adapter的類

class MyAdapter extends ListAdapter<Object, MyAdapter.MyViewHolder> {

    protected MyAdapter(@NonNull DiffUtil.ItemCallback<PhotoItem> diffCallback) {
        super(new DiffUtil.ItemCallback<Object>() { // 差異化比較
            @Override
            public boolean areItemsTheSame(@NonNull PhotoItem oldItem, @NonNull PhotoItem newItem) {
                return false; //比如oldItem.getId() == newItem.getId();比較Object里的id
            }

            @Override
            public boolean areContentsTheSame(@NonNull PhotoItem oldItem, @NonNull PhotoItem newItem) {
                return false; // 比如 (oldItem.getWord().equals(newItem.getWord()))
                        // &&(oldItem.getTranslate().equals(newItem.getTranslate()));
                         //比較Object里的word和translate
            }
        });
    }

    static class MyViewHolder extends RecyclerView.ViewHolder {
          // 這里定義ui組件
          // TextView tvNum;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            // 這里放ui組件
            // tvNum = itemView.findViewById(R.id.tv_num);
        }
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View itemView = inflater.inflate(R.layout.item_layout, parent, false); // 這里為item的layout
        MyViewHolder myViewHolder = new MyViewHolder(itemView);
        // 這里寫你要設(shè)置的監(jiān)聽器
        // 可以用tag的方式從下面取數(shù)據(jù),比如:
        //  Word word = (Word) myViewHolder.itemView.getTag(R.id.word_tag); 
        // 也可以直接getItem獲得當(dāng)前顯示內(nèi)容的Object對象
        // Word word = getItem(myViewHolder.getAdapterPosition());
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        // 這里就發(fā)揮你的想象力綁定ui控件了
        // 若有tag:
        // holder.itemView.setTag(R.id.word_tag ,word);
    }
}

Tag放values - id.xml:

<resources>
    <item name="word_tag" type="id"/>
</resources>

備份一個案例:

/**
 * Created by kusunoki on 2020/5/14 0014 17:48.
 */
class MyAdapter extends ListAdapter<PhotoItem, MyAdapter.MyViewHolder> {

    protected MyAdapter() {
        super(new DiffUtil.ItemCallback<PhotoItem>() {
            @Override
            public boolean areItemsTheSame(@NonNull PhotoItem oldItem, @NonNull PhotoItem newItem) {
                return oldItem.getId() == newItem.getId();
            }

            @Override
            public boolean areContentsTheSame(@NonNull PhotoItem oldItem, @NonNull PhotoItem newItem) {
                return oldItem.getPreviewURL().equals(newItem.getPreviewURL());
            }
        });
    }

    static class MyViewHolder extends RecyclerView.ViewHolder {
        ShimmerLayout shimmerLayout;
        ImageView imageView;
        MyViewHolder(@NonNull View itemView) {
            super(itemView);
            shimmerLayout = itemView.findViewById(R.id.shimmerLayout);
            imageView = itemView.findViewById(R.id.imageView2);
        }
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        final View itemView = inflater.inflate(R.layout.item_photo, parent, false);
        final MyViewHolder myViewHolder = new MyViewHolder(itemView);
        myViewHolder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 這里得到了當(dāng)前顯示內(nèi)容的PhotoItem對象
                PhotoItem photoItem = getItem(myViewHolder.getAdapterPosition());
                Bundle bundle = new Bundle();
                bundle.putParcelable("data",photoItem);
                NavController navController = Navigation.findNavController(itemView);
                navController.navigate(R.id.action_galleryFragment_to_photoFragment, bundle);
            }
        });
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
        holder.shimmerLayout.setShimmerColor(0x55ffffff);
        holder.shimmerLayout.setShimmerAngle(0);
        holder.shimmerLayout.startShimmerAnimation();
        Glide.with(holder.itemView)
                .load(getItem(position).getPreviewURL())
                .placeholder(R.drawable.ic_launcher_background)
                .listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                        if (holder.shimmerLayout != null) {
                            holder.shimmerLayout.stopShimmerAnimation();
                        }
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        if (holder.shimmerLayout != null) {
                            holder.shimmerLayout.stopShimmerAnimation();
                        }
                        return false;
                    }
                })
                .into(holder.imageView);

    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容