在Activity中调用Adapter.getView更改不了某控件的状态

毕业设计客栈 论文问答 1

在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);}

回复

共2条回复 我来回复
  • 源码码头网
    这个人很懒,什么都没有留下~
    评论

    题主对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的内容。

    0条评论
  • 毕设小屋
    这个人很懒,什么都没有留下~
    评论

    自定义adapter后,调用getview方法得到的view对象不就是底层传的convertview吗?

    0条评论

发表回复

登录后才能评论