首页 > 解决方案 > Android ListView 适配器 getView 未按预期工作

问题描述

我使用本教程来创建自定义列表视图,但由于某种原因,它的行为与我的预期不同。

这是我更改并当前用于适配器的代码:

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上的代码正在运行 3 次。

在此处输入图像描述

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

如果问题含糊不清,我很抱歉,但我找不到更好的方法来问这个问题。

标签: androidlistviewadapter

解决方案


您需要在其中添加 else 部分getView()

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(). 你可以阅读它只是搜索它。
做一些快速的点。您没有在代码中正确使用视图模式。正确使用它在列表视图中查找 ViewHolder 模式。除此之外,您现在应该移至RecyclerView ListView旧版。


推荐阅读