S756975 2015-08-12 00:56 采纳率: 100%
浏览 4312
已采纳

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

}

  • 写回答

5条回答 默认 最新

  • qsjh898 2015-08-12 13:06
    关注

    题主对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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 如何实验stm32主通道和互补通道独立输出
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题