Code Bye

CusorAdapter刷新Listview界面

 

数据库更新使用CursorAdapter更新界面,需要每秒刷新界面……刷新的时候不管此时在列表哪个位置,刷新之后都会拉到最下面……用了notifyDatasetChanged,cursorAdapter.requery和重新绑定cursor都是一样的效果,就是刷新时候会拉到最下面……有人遇到过这个问题吗,


5分
上面有很大的空白? 刷新完毕后应该用scrollTo 到最顶部 

5分
还没有用过cursoradapter, 可以看下它的接口,还有你的显示用的什么视图?listview,可以设置选中的位置,选0就可以了
引用 1 楼 birdsaction 的回复:

上面有很大的空白? 刷新完毕后应该用scrollTo 到最顶部 

scrollTo是什么意思? 现在我想删除一条消息,正常来说列表应该还是停留在当前位置(比如说中间)才对..但是数据更新之后列表会滚动到最底,这样用户体验很不好,有没什么办法能更新数据之后依然停留在当前呢?微信就做的很好

引用 2 楼 jeky198306 的回复:

还没有用过cursoradapter, 可以看下它的接口,还有你的显示用的什么视图?listview,可以设置选中的位置,选0就可以了

对,就是listview,继承了cursoradapter来获取数据库数据渲染列表

你说的设置选中位置怎么实现呢?可以给个思路不?

我想要实现数据库更新时候更新列表(界面),就是不知道用什么方法通知界面更新比较好,notifydatesetchangged  和cursor.requery试过了都是数据库更新就拉到最低…

刷新完回到顶部,有个方法setSelection?设置默认第一行
我去测试了一哈。。在你适配器更新之后,。对LISTview设置setselection属性。最好异步或者丢线程里面。刷新了之后UI会改变。如果显示最上面 就设置0,最下面直接设置成返回的数据长度
引用 6 楼 lpk_6 的回复:

我去测试了一哈。。在你适配器更新之后,。对LISTview设置setselection属性。最好异步或者丢线程里面。刷新了之后UI会改变。如果显示最上面 就设置0,最下面直接设置成返回的数据长度

我解决了抖动的那个问题了,是listview中多了一行属性android:stackFromBottom=”true”,所以界面更新的时候会被拉到最下面,去掉就会留在原来位置了….
还剩下一个问题就是我定时每秒刷新的时候,聊天记录的头像部分会一直闪烁,我用的是adapter.notifyDatasetChanged();不知道你那边会不会?有没更好的刷新方法或者是别的原因?

引用 6 楼 lpk_6 的回复:

我去测试了一哈。。在你适配器更新之后,。对LISTview设置setselection属性。最好异步或者丢线程里面。刷新了之后UI会改变。如果显示最上面 就设置0,最下面直接设置成返回的数据长度

就是用handler实现每秒刷新一次,每刷新一次界面就闪烁一次……

引用 8 楼 zhangshihuann 的回复:
Quote: 引用 6 楼 lpk_6 的回复:

我去测试了一哈。。在你适配器更新之后,。对LISTview设置setselection属性。最好异步或者丢线程里面。刷新了之后UI会改变。如果显示最上面 就设置0,最下面直接设置成返回的数据长度

就是用handler实现每秒刷新一次,每刷新一次界面就闪烁一次……

你丢代码上来按。闪烁可能是又重新加载了一次适配器。


30分
引用 8 楼 zhangshihuann 的回复:
Quote: 引用 6 楼 lpk_6 的回复:

我去测试了一哈。。在你适配器更新之后,。对LISTview设置setselection属性。最好异步或者丢线程里面。刷新了之后UI会改变。如果显示最上面 就设置0,最下面直接设置成返回的数据长度

就是用handler实现每秒刷新一次,每刷新一次界面就闪烁一次……

可能是你数据过大,有图片啊 什么的。每次调用notiy那个方法的时候,都会加载一次。然后就会出现闪烁,额。这个问题 
要么你试试把那个notiy方法封装出去 然后调用那个方法
比如
void  update(){
adapter.notifyDataSetChanged();
}
然后调用update

引用 9 楼 lpk_6 的回复:
Quote: 引用 8 楼 zhangshihuann 的回复:
Quote: 引用 6 楼 lpk_6 的回复:

我去测试了一哈。。在你适配器更新之后,。对LISTview设置setselection属性。最好异步或者丢线程里面。刷新了之后UI会改变。如果显示最上面 就设置0,最下面直接设置成返回的数据长度

就是用handler实现每秒刷新一次,每刷新一次界面就闪烁一次……

你丢代码上来按。闪烁可能是又重新加载了一次适配器。

下面是每秒刷新通知一次界面刷新的代码….刷新的时候就闪烁了,只有聊天记录的文本不闪,只有旁边的头像图片闪烁了…
private Handler md = new Handler(){
public void handleMessage(android.os.Message msg) {  
            switch (msg.what) {  
            case 1:  
             try {
             mAdapter.notifyDataSetChanged(); //通知界面更新 
} catch (NullPointerException e) {
e.printStackTrace();
}
            
                md.sendEmptyMessageDelayed(1, 1000);
                break;  
            }  
}
};

引用 10 楼 lpk_6 的回复:
Quote: 引用 8 楼 zhangshihuann 的回复:
Quote: 引用 6 楼 lpk_6 的回复:

我去测试了一哈。。在你适配器更新之后,。对LISTview设置setselection属性。最好异步或者丢线程里面。刷新了之后UI会改变。如果显示最上面 就设置0,最下面直接设置成返回的数据长度

就是用handler实现每秒刷新一次,每刷新一次界面就闪烁一次……

可能是你数据过大,有图片啊 什么的。每次调用notiy那个方法的时候,都会加载一次。然后就会出现闪烁,额。这个问题 
要么你试试把那个notiy方法封装出去 然后调用那个方法
比如
void  update(){
adapter.notifyDataSetChanged();
}
然后调用update

还是会闪  后面再研究一下 怕后面忘了先给分先吧,你回答的最多就给你最多分吧


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明CusorAdapter刷新Listview界面