列表视图中的ImageView在搜索刷新时发生了变化

时间:2015-01-16 07:10:25

标签: java android listview android-listview imageview

我有listview,其中包含TextViewImageView

这是:

enter image description here

<OnClickImageView次更改会打开alertdialog,其中包含“是”和“否”按钮。

enter image description here

如果按是

imageView将其背景更改为蓝色,

如果按否,

imageView背景更改为红色。

enter image description here

直到现在它工作正常。

我在edittext上方搜索listview,根据textview中的listview进行搜索。

现在搜索时,imageview未显示更改的背景,但仅显示默认背景。见:

enter image description here

如何让imageview显示在警告对话框中选择的图像。

代码

@Override
 public View getView(int position, View convertView, ViewGroup parent) {
   View v = convertView;
  if (v == null) {
   LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   v = vi.inflate(R.layout.custom_lay, null);
  }else{
    v=convertView;
  }
  holder = new ViewHolder();
    holder.code = (TextView) v.findViewById(R.id.DealerName);
  holder.btnName = (ImageView) v.findViewById(R.id.BtnStreet); 
    holder.btnName.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(final View vi) {
    // TODO Auto-generated method stub
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage("select any one?");
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {



//       holder.btnName.setBackgroundResource(R.drawable.green_icon);
     vi.setBackgroundResource(R.drawable.blue_icon);
//     notifyDataSetChanged();
    }
    });
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog, int which) {

      holder.btnName.setImageResource(R.drawable.blue_icon);
      //vi.setBackgroundResource(R.drawable.green_icon);
//      notifyDataSetChanged();
     }
    });
    AlertDialog dialog = builder.create();
    dialog.show();
   }
  });
     v.setTag(holder);
     ViewHolder hold = (ViewHolder) v.getTag();
    String lb = DisplayedValues.get(position);
    hold.code.setText(getItem(position));
//   hold.btnName.setBackgroundResource(getSelectedItemPosition());

  return v;
 }

1 个答案:

答案 0 :(得分:0)

这是因为ListView重新使用了项目布局。它只会膨胀一次在屏幕屏幕上可见的数量。这样可以节省内存。

您需要保存每个ListView项ImageView的状态。例如,在boolean[]

应在适配器的getView方法中设置背景(基于您的状态数组)。

切换保存您的ImageView背景状态应该在OnClickListener中进行。