【发布时间】:2016-05-01 08:41:04
【问题描述】:
我正在 Android 中制作一个简单的 ListView,它显示为一个对话框。其目的是让用户选择将保存为 SharedPreference 的项目。下次用户打开同一个列表时,我希望他们上次选择的项目被突出显示。
我的问题是,当我使用我的 ArrayAdapter 创建列表时,挑出他们上次选择的索引,然后应用自定义可绘制对象作为背景以显示该项目当前已保存,ListView 将 3 个项目显示为“已选择” .它始终是第一个项目、最后一个项目以及我想要选择的项目。
这是一张显示正在发生的事情的图片
这是我的 ArrayAdapter 的代码。我正在使用 ViewHolder 模式。
public class AdapterColors extends ArrayAdapter<ColorItem> {
private Context context;
private ColorItem[] objects;
private int layoutResource;
private static class ViewHolder {
ImageView icon;
TextView color;
}
public AdapterColors(Context context, int resource, ColorItem[] objects) {
super(context, resource, objects);
this.context = context;
this.layoutResource = resource;
this.objects = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ColorItem colorItem = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(layoutResource, parent, false);
viewHolder.icon = (ImageView) convertView.findViewById(R.id.imageview_icon);
viewHolder.color = (TextView) convertView.findViewById(R.id.textview_item_name);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.icon.setImageResource(colorItem.getColorIconId());
viewHolder.color.setText(colorItem.getColorName());
if(position == 2) {
convertView.setBackgroundResource(R.drawable.list_item_selected);
}
return convertView;
}
}
R.drawable.list_item_selected 是我的自定义可绘制对象。
作为测试,我只选择了 2 的位置,正如您在 getView() 方法中看到的那样。位置 2 的项目正确地设置了它的 backgroundResource,但第一个和最后一个项目也被设置了!这是怎么回事!?
如果有人需要查看任何其他代码,我很乐意更新我的问题。
谢谢。
【问题讨论】:
-
为您的 if 添加 else 部分并设置未选择的背景
标签: android listview android-arrayadapter