问题描述
- 在Activity中调用Adapter.getView更改不了某控件的状态
-
在activity中调用adapter.gerView方法(此adapter是继承baseAdapter的而来的),得到了某个控件在listView列表项中的View,然后通过这个View.FindViewByID找到这个控件,最后更新控件的状态,但是为什么不起作用?
PS : 下面那个state的值是在广播中收到的消息,由于太多就不一一贴出来了。
MyAdapter adapter = new MyAdapter(context);View view2 = adapter.getView(ListViewPostion, convertView, null);
ImageButton btn = (ImageButton) view2.findViewById(R.id.btn__switch);
if(state) {
btn.setImageResource(R.drawable.switch_on);
}else {
btn.setImageResource(R.drawable.switch_off);
}
解决方案
题主对ListView的机制理解有些不太对。
Android将ListView与Adapter进行了接耦,当一个Item需要在ListView上进行展示的时候,ListView会调用与它绑定的adapter.getView()来获取
这一个Item所需要的View,然后将这个View绑定到ListView的这一个Item上进行展示。
所以Adapter的getView()是一个回调方法,有@Override标识,实际上ListView调用getView()获得View之后,内部还有一些操作来让这个View显示出来。
题主的代码完成了“获取这一个Item”所需要的View,并且对View进行了内容设置,但是没有完成"让ListView展示这个View"这部分的操作。
这部分的操作,对于调用者来说,在adapter.notifyDataSetChanged()方法里进行。
所以题主应该在MyAdapter中通过一个变量来保存R.drawable.switch_on或者R.drawable.switch_off的值,例如
private int imageButtonContent = R.drawable.switch_on;
然后MyAdapter.getView()中通过imageButtonContent这个值来设置ImageButton的内容。
当Activity接收到广播的时候,就将MyAdapter的imageButtonContent值根据你的需要切换,然后再调用adapter.notifyDataSetChanged()来刷新ListView的内容。
希望能够帮到你,如果还不明白的话可以加我QQ271200723
解决方案二:
参考下是不是这个:
http://blog.csdn.net/sunnyfans/article/details/11737617
解决方案三:
View view2 = adapter.getView(ListViewPostion, convertView, null);
这里获取到的view2关键看你getview中怎么处理的,
同时你手工调用getview,获取到的view也不是你listview显示的item,只能说布局一样,但不是一个
解决方案四:
自定义adapter后,调用getview方法得到的view对象不就是底层传的convertview吗?得不到你要的view的,没办法!