final ListView listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(android.view.ActionMode mode, int position, long id, boolean checked) {
RelativeLayout layout = (RelativeLayout) listView.getChildAt(position);
if (checked) {
//layout.setBackgroundColor(Color.parseColor("#c0c0c0"));
// TextView textView = (TextView) layout.findViewById(R.id.title);
Log.d("TAG", String.valueOf(position)+"-----"+listView.getCount());
selectItem.add(String.valueOf(position));
} else {
layout.setBackgroundColor(Color.parseColor("#ffffff"));
Log.d("TAG", String.valueOf(position)+"-----"+layout.toString());
selectItem.remove(String.valueOf(position));
}
}
之前没说清楚 不好意思 其实我的目的就是获得当前的选中项,然后修改它的背景啊、图片等样式。
为什么因为listview.getchildat 只能获得当前显示的layout?
我怎么感觉有bug呢....不是应该只有一个是选中色吗!
listView.pointToPosition()
弄了半天 ,终于解决了。下面分享下我的解决办法,希望可以帮到别人。不过上面 @chuyao 也提供了个办法,大家可以看看。
还是直接贴代码吧...
public void onItemCheckedStateChanged(android.view.ActionMode mode, int position, long id, boolean checked) {
adapter.notifyDataSetChanged();//通知样式变化
}
private class MySimpleAdapter extends SimpleAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (view != null) {
if (getListView().isItemChecked(position)) {
view.setBackgroundColor(Color.parseColor("#c0c0c0"));
} else {
view.setBackgroundColor(Color.parseColor("#ffffff"));
}
}
return view;
}
在adapter内定义你的ViewHolder,把item的layout作为ViewHolder的成员变量,在adapter的getItem方法返回相应position的ViewHolder对象,通过listView.getAdapter().getItem(position)得到item的ViewHolder,也就得到item的layout了,这下就不会有null的情况了。