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
现在处于遗留状态。
我已使用此 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
现在处于遗留状态。