做了个需要更新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会使页面回到顶部,不会停留在之前的位置