为什么我的Android ListView会选择多个项目?

时间:2016-01-25 05:39:56

标签: android listview android-arrayadapter

我在Android中创建了一个简单的ListView,它显示为一个对话框。其目的是让用户选择将保存为SharedPreference的项目。下次用户打开相同的列表时,我希望上次选择的项目突出显示。

我的问题是,当我使用ArrayAdapter创建列表时,单击他们上次选择的索引,然后应用自定义drawable作为背景以显示该项目当前已保存,ListView将3个项目显示为“已选中” 。它总是第一个项目,最后一个项目,以及我想要选择的项目。

这是一张显示正在发生的事情的图片

image01 image02

这是我的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设置,但第一个和最后一个项目也已设置!这是怎么回事??

如果有人需要查看任何其他代码,我们很乐意更新我的问题。

感谢。

1 个答案:

答案 0 :(得分:1)

您需要为所有位置提供未选择的图像,除了您希望在您的情况下选择的位置位置2.在单击ListItem或Selected项目后,调用notifyDataSetChange的{​​{1}}刷新列表视图。< / p>

BaseAdapter