数据未从 sqlite 动态插入 RecyclerView

Data is not inserting dynamically in RecyclerView from sqlite

大家好,我正在尝试在 Recyclerview 中动态加载数据,这是我的代码:

PostAdapter.java

public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder> {

ArrayList<Post> listData;
String rpostid, ruserid, rname, rcat, rdate, rtittle;

public PostAdapter(ArrayList<Post> postList) {
    this.listData = postList;
    notifyDataSetChanged();
}

public PostAdapter(ArrayList<Post> postList,int i) {
    this.listData = postList;
    this.notifyItemRangeInserted(getItemCount()+1,i);
}

@Override
public PostAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.post_item, viewGroup, false);
    return new posts(v);
}

public class posts extends ViewHolder {
    TextView tvTittle, tvPostId, tvUseId, tvName, tvCat, tvDate;

    public posts(View v) {
        super(v);
        /* View stuf */
    }
}

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {

    final posts holder = (posts) viewHolder;
    Post post = listData.get(position);
    rpostid = post.getPost_id();
    ruserid = post.getUser_id();
    rname = post.getUser_name();
    rcat = post.getPost_cat();
    rdate = post.getPost_time();
    rtittle = post.getPost_title();
    holder.tvPostId.setText(rpostid);
    holder.tvUseId.setText(ruserid);
    holder.tvName.setText(rname);
    holder.tvCat.setText(rcat);
    holder.tvDate.setText(rdate);
    holder.tvTittle.setText(rtittle);
}

@Override
public int getItemCount() {
    return listData.size();
}

}

这是我在调用 swipeToRefresh 时更新数据的代码

public void newPost(int s){
    postNew = handler.getNewPost(s);//getting data from DB
    postList.addAll(postNew);
    adapter = new PostAdapter(postNew);   
    listView.setAdapter(adapter);
}

下面是滚动时在底部添加数据的代码

public void oldPost(int s){
    postNew = handler.getOldPost(s);// getting data from db
    postList.addAll(postNew);
    adapter = new PostAdapter(postNew,postNew.size());
    listView.setAdapter(adapter);
}

我想在调用 SwipeToRefresh 时在 recyclerView 的顶部动态插入数据,并希望在向下滚动时在 recyclerview 的底部显示旧数据。插入了新数据但不是动态插入,而是 recyclerview 刷新并转到其开头。

一切正常,比如获取回收视图的底部并调用 oldPost() + 滑动刷新以调用 newPost()。问题只是数据没有动态加载,请帮助我。提前致谢。

编辑后更新:

您需要将更新代码移出构造函数并移至普通方法,构造函数 "constructs" 一个新的对象实例并且不会神奇地更新任何内容:

public void InsertInPoistion(ArrayList<Post> postList,int i) {
    int begin = listData.size();
    this.listData.addAll(postList);
    int end = listData.size();
    this.notifyItemRangeInserted(begin ,end);
}

然后在你的 fragment/activity:

中调用这个方法
mAdapter.InsertInPoistion(postNew,postNew.size());

此处的mAdapter 是您在第一次实例化适配器后保留的参考。仅在 onCreate()

中创建一个新适配器

为什么不使用 contentprovider 和 LoaderCallback。我会自动为你做这一切。

查看我的例子 https://github.com/codephillip/CarContentProvider

可能会有帮助