android - 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 次。
我认为这一定与应用程序的生命周期有关,但我不确定。
如果问题含糊不清,我很抱歉,但我找不到更好的方法来问这个问题。
解决方案
您需要在其中添加 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
旧版。
推荐阅读
- .htaccess - htaccess 使用另一个环境变量设置环境变量
- javascript - 使用扩展运算符或 Object.assign 将子节点的所有节点复制到父节点,避免覆盖相同的属性
- java - 矩阵相乘时接收错误
- java - Thymeleaf - 如何创建进度条?
- sql - Delta Lake MERGE / UPDATE rewriting data even when condition is not met
- python - Why the loss still repeat?
- sql - Oracle 返回计数的最高值
- spring - 我如何弄清楚注册有什么问题?
- powershell - 如何在 powershell 中重置 Windows.Form 的内容?
- r - 为 CentOS Linux 寻找 R 4.0.3 的编译版本