【问题标题】:ImageView inside listview getting changed on search refresh列表视图内的 ImageView 在搜索刷新时发生更改
【发布时间】:2015-01-16 07:10:25
【问题描述】:

我有一个listview,其中包含TextViewImageView

这里是:

OnClick of ImageView 更改会打开一个带有“是”和“否”按钮的 alertdialog

如果按是

imageView 将其背景更改为蓝色,

如果按否,

imageView 背景变为红色。

到目前为止,它工作正常。

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

现在在搜索时,imageview 没有显示更改的背景,而是仅显示默认背景。看到这个:

我应该怎么做才能使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;
 }

【问题讨论】:

  • 您需要维护一个模型类才能知道按下了哪个按钮。否则,即使在滚动时,列表视图也会忘记哪个被按下。请参考这个答案:stackoverflow.com/a/27014443/2389078
  • 请添加搜索码
  • 并在全球范围内存储背景更改并在根据搜索条件填充列表视图时使用它们

标签: java android listview android-listview imageview


【解决方案1】:

发生这种情况是因为 ListView 重用了项目布局。它一次只充气在屏幕上可见的数量。这样可以节省内存。

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

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

ImageView 背景状态的切换保存应该发生在OnClickListener

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2011-11-06
    • 2015-01-09
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多