0

好傢伙插入我試圖加載動態地Recyclerview這裏的數據是我的代碼:數據不是動態的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); 
} 

這裏是鱈魚E對於在底部添加數據,同時滾動

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); 
} 

我要讓數據插入動態上recyclerView頂部時SwipeToRefresh被調用,並想在recyclerview底部顯示舊數據時向下滾動。新數據被插入,但不是動態的,而是recyclerview刷新並開始。

所有的事情是工作的罰款就像得到recycleview的底部,並調用oldPost() +刷卡刷新調用newPost()。問題是隻有數據沒有動態加載請幫助我。提前致謝。編輯後

+0

通知您必須使用notifyDatasetChanged()數據集變化的回收視圖。 http://stackoverflow.com/questions/24740557/notifydatasetchanged-not-working-on-recyclerview –

+0

我打電話notifyDatasetChanged();請參閱postadapter.java –

+0

是的,但它在構造函數中調用。這是另一篇關於如何正確使用它的文章。 http://stackoverflow.com/questions/31367599/how-to-update-recyclerview-adapter-data –

回答

0

UPDATE:

你需要將你的更新代碼出了構造和正常方法,構造「構建」一個新的對象實例,並不會奇蹟般地任何更新:

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

然後調用這個方法您的片段/活動內:這裏

mAdapter.InsertInPoistion(postNew,postNew.size()); 

mAdapter是你保持你的實例適配器後的第一個參考時間。只在onCreate()創建一個新的適配器()

+0

@ Ramin,在onBindViewHolder所有的值都綁定,但我沒有在我的代碼中顯示這個檢查我的問題,我更新了編碼部分。 –

+0

但我不知道如何使用notifyItemRangeInserted(); ... –

+0

我試過這個,但數據不是動態添加的..... –

0

爲什麼不使用contentprovider和LoaderCallback。我會自動爲你做這一切。

結帳我的例子 https://github.com/codephillip/CarContentProvider

這可能是幫助

+0

我的所有代碼都設置好了,我即將正常工作,如果我將使用這個例子,它會花費幾天的時間來理解+因爲Android中新增了實現...... –