佛山网站建设锐艺a068,花都网站设计都,郑州哪里做网站,wordpress修改首页网址导航请原谅这个问题现在才提出来#xff0c;在一个fragment界面上需要在列表项展示好几行数据#xff0c;需要根据网络通知#xff0c;获取数据#xff0c;重新更新listview里面的数据#xff0c;那首先想到的是使用适配器BaseAdapter#xff0c;相信很多朋友都可以从网上找到… 请原谅这个问题现在才提出来在一个fragment界面上需要在列表项展示好几行数据需要根据网络通知获取数据重新更新listview里面的数据那首先想到的是使用适配器BaseAdapter相信很多朋友都可以从网上找到baseAdapter的详细讲解我就不说了说一下我用这个适配器遇到的问题 问题1 当网络数据发生变化发送更新消息过来这时候就需要更新数据重新绑定数据源,我在数据变化时候后面加上tableAdapter.notifyDataSetInvalidated();的确是可以更新但是遇到一个很大的问题就是当显示的列表很多需要下拉到底停在底部的时候这时候数据发生变化重新绘制listview就会导致列表跳到第一项导致用户体验及其的不好整个界面不停的跳动这是无法容忍的解决的办法 public void fireTableDataChange() { handler.post(new Runnable() { Override public void run() { // tableAdapter.notifyDataSetInvalidated(); tableAdapter.notifyDataSetChanged();//换成这个方法之后就不会出现数据更新界面太跳 } }); } 分析原因如下 1:如果要刷新的数据源改变了就调用notifyDataSetChanged 例如:我们在新浪微博中要进行分显示刷新微博; 2:如果那个数据源失效了之后就 调用notifyDataSetInvalidated 另一位的见解
notifyDataSetInvalidated()会重绘控件还原到初始状态 notifyDataSetChanged()重绘当前可见区域 Android BaseAdapter 更新数据 notifyDataSetInvalidated() notifyDataSetChanged()