我是否正确使用ViewHolder? Everithing工作正常,但我仍然怀疑使用holder Recycler的ListView优化

时间:2018-01-05 17:15:17

标签: java android listview android-viewholder

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

我的观点持有者类:

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);
}

我的自定义适配器类:

@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;
}

我使用它吗?

1 个答案:

答案 0 :(得分:0)

除了代码的这一部分

之外似乎对我没问题
  //set the clicked background
    if(TaskActivity.getIsClicked() && TaskActivity.getPositionClicked()-1 == position){
        convertView.setBackgroundResource(R.color.backgroundSelectedItem);
    }

对于未单击的项目,您可能需要将后台资源重置为默认值。也许你必须在“if”

中添加“else”部分