关于listview的setAdapter和notifyDataSetChanged

做了个需要更新listview的项目,在listview更新时遇到问题,抓耳挠腮半天仍未能解决,最后请教高手才得以解决(其实是自己太菜

了,现在想想又是被一个简单问题困扰了)

1,Adapter中notifyDataSetChanged的作用

        对于Android开发来说处理一些界面需要和Adapter适配器打交道,虽然Android自带了一些比如ArrayAdapter但是大多数情况下无

法满足我们需要,所以就要从BaseAdapter派生一个类满足我们特殊的需要。
        首先我们可能重写getView(),通过LayoutInflater的inflate方法映射一个自己定义的Layout布局xml加载或从xxxView中创建。这些大

家可能滚瓜烂熟了但是仍然很多Android开发者对于BaseAdapter中notifyDataSetChanged()方法不是很理解,notifyDataSetChanged方

法通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容。

2,setAdapter的作用

        顾名思义,就是为listview放置适配器,这次需要更新listview时错就错在错用了notifyDataSetChanged,而没有用setAdapter。

其实问题很简单,我的更新不是常见的对一个单独的listview的增删改查的更新操作,而是每次需要取到新的list的更新,每次都是取新

的list就要每次都setAdapter一下,最后得以更新listview。


更新一下,感谢评论给与我的提醒,在发表博文之后曾发现好像问题不在setAdapter和notifyDataSetChanged上 当我把convertView == null的判断去掉后 貌似两种方法都可以得到更新了 现在经过热心人的评论 我终于完全明白两者之间区别 

当时真是困扰了很久 网上搜了半天 就没找找到如此精准的解释 导致自己改好了错误 也是一知半解

 

其实2个都可以更新,notifyDataSetChanged与setAdapter执行后都会到getView方法中,不同在于调用setAdapter的话view是空的需要重新创建,而前者传的是之前的view实体;另一个区别setAdapter会使页面回到顶部,不会停留在之前的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值