我有listview
,其中包含TextView
和ImageView
。
这是:
<
OnClick
次ImageView
次更改会打开alertdialog
,其中包含“是”和“否”按钮。
如果按是
imageView
将其背景更改为蓝色,
如果按否,
imageView
背景更改为红色。
直到现在它工作正常。
我在edittext
上方搜索listview
,根据textview
中的listview
进行搜索。
现在搜索时,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;
}
答案 0 :(得分:0)
这是因为ListView重新使用了项目布局。它只会膨胀一次在屏幕屏幕上可见的数量。这样可以节省内存。
您需要保存每个ListView项ImageView的状态。例如,在boolean[]
。
应在适配器的getView
方法中设置背景(基于您的状态数组)。
切换和保存您的ImageView背景状态应该在OnClickListener
中进行。