我在Android中创建了一个简单的ListView,它显示为一个对话框。其目的是让用户选择将保存为SharedPreference的项目。下次用户打开相同的列表时,我希望上次选择的项目突出显示。
我的问题是,当我使用ArrayAdapter创建列表时,单击他们上次选择的索引,然后应用自定义drawable作为背景以显示该项目当前已保存,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是我的自定义绘图。
作为测试,我只能在getView()方法中看到2的位置。位置2处的项目正确获取其backgroundResource设置,但第一个和最后一个项目也已设置!这是怎么回事??
如果有人需要查看任何其他代码,我们很乐意更新我的问题。
感谢。
答案 0 :(得分:1)
您需要为所有位置提供未选择的图像,除了您希望在您的情况下选择的位置位置2.在单击ListItem或Selected项目后,调用notifyDataSetChange
的{{1}}刷新列表视图。< / p>
BaseAdapter