从数据库中拿出的数据,在每次刷新的时候都会再全部加载一次,刷新一次就多出一次重复数据:
SwipeRefresh的OnRefresh方法如下:
@Override public void onRefresh() { new AsyncTask>() { @Override protected List doInBackground(Void... params) { List list = new ArrayList (); 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 users) { super.onPostExecute(users); myAdapter.addItems(users); //停止刷新 swipeRefreshLayout.setRefreshing(false); //滑动到第一项 recyclerView.scrollToPosition(0); } }.execute(); }
MyAdapter继承自Recyclerview.Adapter,其中添加数据的代码如下:
public void addItems(Listitems) { if (items == null) return; this.datas.addAll(0, items); this.notifyItemRangeChanged(0, items.size()); }
效果如下:
addItem方法中应该先调用list.clear()方法。。
notifyItemRangeChanged 是告知列表项的改动,而你这里的操作是列表项的插入,应该使用 notifyItemRangeInserted