每次调用notifyDataSetChanged()时,都会为每个项目调用onBindViewHolder()

我正在尝试使用android的RecyclerView。

1)getItemId()被覆盖。 2)设置setHasStableIds(true)。

但是每次调用notifyDataSetChanged()时,都会为每个项目调用onBindViewHolder()。

我认为,如果项目ID与现有ID相同,则不应调用onBindViewHolder()。

请让我知道我对该代码的误解或错误。

public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ViewHolder> {
    private int[] mData = {101, 102, 103, 104, 105};

    class ViewHolder extends RecyclerView.ViewHolder {
        private TextView mTextView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            mTextView = itemView.findViewById(R.id.text_view);
            mTextView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    notifyDataSetChanged();
                }
            });
        }
    }

    public ExampleAdapter() {
        setHasStableIds(true);
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Log.d("ExampleAdapter", "onBindViewHolder : " + position);
        holder.mTextView.setText("data : " + mData[position]);
    }

    @Override
    public int getItemCount() {
        return mData.length;
    }

    @Override
    public long getItemId(int position) {
        return mData[position];
    }
}
评论