listView 中因为每项都用的是一个布局,所以每项显示的都一样。这样有时候就会出现一些问题,比如当我选择listView中的一项,我想要特意标注与其他项不同,给这项加一个背景图片。这样一来当我们滑动时会加载下一项布局,这时在加载后面的布局时会出现我们特意标注的背景图,也就是说会出现多个特意标注的项。我们想要的只我们选择的那项被标注,但是现在出现了多项被标注,这不是我们想要的结果。这个问题怎么解决呢?代码如下:
public class ArtPagerAdapter extends BaseAdapter {
private List<String> mPath;
private Context mContext;
private LayoutInflater mInflater;
private Bitmap bitmap;
public ArtPagerAdapter(Context context, List<String> path) {
this.mContext = context;
this.mPath = path;
mInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return mPath.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
private int mSelectPosition = -1;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int sign = position;
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.horizontal_list_item,
null);
holder.mImage = (ImageView) convertView
.findViewById(R.id.img_list_item);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
try {
bitmap = BitmapFactory.decodeStream(assetManager.open(mPath.get(sign)));
} catch (IOException e) {
e.printStackTrace();
}
holder.mImage.setImageBitmap(bitmap);
holder.mImage.setSelected(mSelectPosition == position);
holder.mImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mSelectPosition = sign;
notifyDataSetChanged();
tempView.setSelected(false);
v.setSelected(true);
tempView = v;
photoSortr.initArtView(mPath.get(sign));
}
});
return convertView;
}
}
初始化一个 变量29行 private int mSelectPosition = -1;初始化控件时赋值给这个变量51行holder.mImage.setSelected(mSelectPosition == position);当我们点击一项把我们点击的位置赋值给这个变量56行 mSelectPosition = sign;再调用重绘,58行notifyDataSetChanged();这样就解决了出现多项标注的问题。