我是否正确使用 ViewHolder?一切都有效,但我仍然对使用 holder recycler 的 ListView 优化有疑问

Do I use ViewHolder correctly? Everithing is worked, but i still have doubts with the ListView optimization with holder recycler

我只是用 ViewHolder 调整我的自定义适配器代码,以便我可以用回收器优化我的列表视图,但我不确定我是否做对了。

我的观点持有者class:

public class ViewHolderTask {
int positionHolder;
TextView nameHolder;
TextView timeHolder;
TextView sessionHolder;
TextView dateHolder;
FloatingActionButton mFabTaskHolder;

public ViewHolderTask(View v, int position) {
    this.positionHolder = position;
    this.nameHolder = v.findViewById(R.id.taskNameText);
    this.timeHolder = v.findViewById(R.id.timeTextView);
    this.sessionHolder = v.findViewById(R.id.textViewSession);
    this.dateHolder = v.findViewById(R.id.dateTextView);
    this.mFabTaskHolder = v.findViewById(R.id.myFabTask);
}

我的自定义适配器 class:

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    ViewHolderTask holder;
    if(convertView == null){

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(
                Context.LAYOUT_INFLATER_SERVICE );
        convertView = inflater.inflate(R.layout.task_row, parent, false);
        holder = new ViewHolderTask(convertView, position);
        convertView.setTag(holder);

    }else{
        holder = (ViewHolderTask) convertView.getTag();
    }
    Task task = taskArrayList.get(position);
    //set the configurations
    holder.getTimeHolder().setText(getTimeString(task.getTime()));
    holder.getNameHolder().setText(task.getName());
    holder.getDateHolder().setText(getDateString(task.getDate()));
    holder.getSessionHolder().setText(getSessionString(task.getSession()));
    //Set the FAB listener
    addFabListener(holder.getmFabTaskHolder(), position);

    //set the clicked background
    if(TaskActivity.getIsClicked() && TaskActivity.getPositionClicked()-1 == position){
        convertView.setBackgroundResource(R.color.backgroundSelectedItem);
    }

    return convertView;
}

我用对了吗?

除了这部分代码之外,对我来说似乎没问题

  //set the clicked background
    if(TaskActivity.getIsClicked() && TaskActivity.getPositionClicked()-1 == position){
        convertView.setBackgroundResource(R.color.backgroundSelectedItem);
    }

对于未点击的项目,您可能需要将后台资源重置为默认值。也许您必须将 "else" 部分添加到 "if"