欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

listview点击,更换此行的图片,实现已读未读

程序员文章站 2022-07-12 13:16:13
...

今天在群里有人问,点击listview中的一行时,更换此行的图片,实现已读未读

大概实现原理就是,为listview增加OnItemClickListener的监听

得到选中的行,将数据集中此行对应的图片标识换了,再listview更新

附上代码段吧.

main.xml

中就只增加了一个listview的控件

listitem.xml中包含一个ImageView,与一个TextView

//变量
List<Map<String, Object>> data = null;
ListView lv = null;
SimpleAdapter sd = null;

 

onCreate 中的代码

 

lv = (ListView) findViewById(R.id.listView1);
data = new ArrayList<Map<String, Object>>();
for (int i = 0; i < 10; i++) {
	Map<String, Object> map = new HashMap<String, Object>();
	map.put("img", R.drawable.ic_launcher);
	map.put("title", "ZF" + i);
	data.add(map);
}
sd = new SimpleAdapter(MainActivity.this, data,
	R.layout.listitem, new String[] { "img", "title" }, 
	new int[] {R.id.imageView1, R.id.textView1 });
lv.setAdapter(sd);
//增加监听
lv.setOnItemClickListener(new OnItemClickListener() {
	@Override
	public void onItemClick(AdapterView<?> arg0, View arg1,
		int position, long arg3) {
		Map<String, Object> mp = data.get(position);
		if(mp.containsKey("img")){
			mp.remove("img");
			mp.put("img", R.drawable.icon);
		}
		data.remove(position);//清除此行对应数据集中的数据
		data.add(position, mp);//增加修改后的数据行
		sd.notifyDataSetChanged();//更新
	}
});

 完工..

 

为什么要更新数据集,而不直接更换此行的图片?

因为直接更换此行图片后,listview滚动后,图片将重新还原.

 

直接更新图片的方法(listview滚动后,图片将重新还原)纯YY一下

取得点击行View,再得到此行的ImageView,重新设置图片资源

View v = (View) lv.getChildAt(position);
ImageView iv = (ImageView) v.findViewById(R.id.imageView1);
iv.setImageResource(R.drawable.icon);

 

相关标签: Android listview