java - 使用SwipeRefresh刷新,notifyItemRangeChanged并没有局部刷新
迷茫
迷茫 2017-04-17 15:49:58
[Java讨论组]

从数据库中拿出的数据,在每次刷新的时候都会再全部加载一次,刷新一次就多出一次重复数据:

SwipeRefresh的OnRefresh方法如下:

@Override
    public void onRefresh() {
        new AsyncTask<Void, Void, List<User>>() {
            @Override
            protected List<User> doInBackground(Void... params) {
                List<User> list = new ArrayList<User>();
                dbRead = db.getReadableDatabase();
                //这里不设置任何条件,输出全部,如果要进行条件查询,则像"name=?"这样写,把具体条件写在
                // 后面一个参数中,这是为了防止SQL注入攻击
                Cursor c = dbRead.query("user", null, null, null, null, null, null);
                while (c.moveToNext()) {
                    int id = c.getInt(c.getColumnIndex("_id"));
                    String name = c.getString(c.getColumnIndex("name"));
                    String sex = c.getString(c.getColumnIndex("sex"));
                    user = new User(name, sex);
                    System.out.println(name + ":-----------:" + id);
                    list.add(user);
                }
                dbRead.close();
                return list;
            }

            @Override
            protected void onPostExecute(List<User> users) {
                super.onPostExecute(users);
                myAdapter.addItems(users);
                //停止刷新
                swipeRefreshLayout.setRefreshing(false);
                //滑动到第一项
                recyclerView.scrollToPosition(0);
            }
        }.execute();
    }

MyAdapter继承自Recyclerview.Adapter,其中添加数据的代码如下:

 public void addItems(List<User> items) {
        if (items == null)
            return;
        this.datas.addAll(0, items);
        this.notifyItemRangeChanged(0, items.size());
    }

效果如下:

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
伊谢尔伦

notifyItemRangeChanged 是告知列表项的改动,而你这里的操作是列表项的插入,应该使用 notifyItemRangeInserted

天蓬老师

addItem方法中应该先调用list.clear()方法。。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号