Android ListView 适配器 getView 未按预期工作

Android ListView Adapter getView is not working as expected

我已使用此 tutorial 来创建自定义列表视图,但出于某种原因,它的行为与我预期的不同。

这是我更改的代码,目前正用于适配器:

public View getView(int position, View convertView, ViewGroup parent) {
     // same code as in example with some differences in the .xml
    viewHolder.itemLabel.setText(info.split(";")[0]);
    viewHolder.itemDescription.setText(info.split(";")[1]);
    viewHolder.itemLabel.setOnClickListener(this);
    viewHolder.itemLabel.setTag(position);
    if(viewHolder.itemLabel.getText().equals("Fat")){
        System.out.println(info);
        System.out.println(viewHolder.itemLabel.getText());
        viewHolder.itemLabel.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.info_icon, 0);
    }
return convertView;
}

现在,由于某种原因,列表中的多个项目都设置了图标,即使标签上只有一个 "Fat"。
打印实际上显示 if 上的代码被 运行 三次。

我认为这一定与应用程序的生命周期有关,但我不确定。

如果问题太模糊,我很抱歉,但我找不到更好的提问方式。

请检查代码这可能会有帮助。

public View getView(int position, View convertView, ViewGroup parent) {
     // same code as in example with some differences in the .xml
    viewHolder.itemLabel.setText(info.split(";")[0]);
    viewHolder.itemDescription.setText(info.split(";")[1]);
    viewHolder.itemLabel.setOnClickListener(this);
    viewHolder.itemLabel.setTag(position);
    if(viewHolder.itemLabel.getText().equals("Fat")){
        System.out.println(info);
        System.out.println(viewHolder.itemLabel.getText());
        viewHolder.itemLabel.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.info_icon, 0);
    }else{
        viewHolder.itemLabel.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); 
    }
    return convertView;
}

需要在getView()里面添加else部分。

public View getView(int position, View convertView, ViewGroup parent) {
    // same code as in example with some differences in the .xml
    if(viewHolder.itemLabel.getText().equals("Fat")){
      // Stuff
    }else{
       // Else stuff
    }
    return convertView;
}

ConvertView 参数是您之前从 getView() 返回的 View 的回收实例。你可以阅读它只是搜索它。
做一些快速点。您没有在代码中正确使用 viewholder 模式。正确使用它在列表视图中查找 ViewHolder 模式。除此之外,您应该移至 RecyclerView ListView 现在处于遗留状态。