2017-05-10 90 views
-2

我填充用新數據回收視圖上的活動 result.The問題是新的數據在 回收視圖月底得到追加如何清除以前的數據在回收視圖 和膨脹回收商查看新數據。如何在Android中刷新recyclerview?

@Override 
protected void onActivityResult(int requestCode, int resultCode, final Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    mAdapter.notifyDataSetChanged(); 
    search_info.clear(); 
    book_type.clear(); 


    if (requestCode == 1) { 
     if (resultCode == RESULT_OK) { 


      getBookData(data); 


      if (books_list.size() > 0) { 

       books_list.clear(); 
       mAdapter.swap(prepareData()); 
       mAdapter.notifyDataSetChanged(); 

      } 
      updateBooks(recyclerView); 
      mAdapter.notifyDataSetChanged(); 


     } 
    } 
} 

這是getBookData的代碼。

private void getBookData(Intent data) { 
    String singles = data.getStringExtra("singles"); 
    String status_5in1series = data.getStringExtra("status_5in1series"); 
    String special_issues = data.getStringExtra("special_issues"); 
    String special_collection = data.getStringExtra("special_collection"); 
    String status_3in1series = data.getStringExtra("status_3in1series"); 
    String status_2in1 = data.getStringExtra("status_2in1"); 
    String special_packs = data.getStringExtra("special_packs"); 
    String junior = data.getStringExtra("junior"); 
    String character_collections = data.getStringExtra("character_collections"); 
    String single_digest = data.getStringExtra("single_digest"); 
    String double_digest = data.getStringExtra("double_digest"); 
    String toddler = data.getStringExtra("toddler"); 
    String tinkle_treasure = data.getStringExtra("tinkle_treasure"); 
    String ack = data.getStringExtra("ack"); 
    String tinkle = data.getStringExtra("tinkle"); 

    search_info.add(singles); 
    search_info.add(status_5in1series); 
    search_info.add(special_issues); 
    search_info.add(special_collection); 
    search_info.add(status_3in1series); 
    search_info.add(status_2in1); 
    search_info.add(special_packs); 
    search_info.add(junior); 
    search_info.add(character_collections); 
    search_info.add(single_digest); 
    search_info.add(double_digest); 
    search_info.add(toddler); 
    search_info.add(tinkle_treasure); 
    search_info.removeAll(Collections.singleton(null)); 

    book_type.add(ack); 
    book_type.add(tinkle); 
    book_type.removeAll(Collections.singleton(null)); 


    String search_array[] = (String[]) search_info.toArray(new String[search_info.size()]); 
    String books_array[] = (String[]) book_type.toArray(new String[book_type.size()]); 


    String books_info = dbHandler.searchForBooks(search_array, books_array).toString(); 
    ParseLocBooks parseLocBooks = new ParseLocBooks(books_info); 
    parseLocBooks.parseJSON(); 

    title = ParseLocBooks.title; 
    price = ParseLocBooks.price; 
    vol_no = ParseLocBooks.vol_no; 
    status = ParseLocBooks.status; 
    ISBN = ParseLocBooks.ISBN; 
    book_id = ParseLocBooks.book_id; 
    brand = ParseLocBooks.brand; 
    book_code = ParseLocBooks.book_code; 
    sku = ParseLocBooks.sku; 
    lang = ParseLocBooks.lang; 



} 

這是我的prepareData代碼。

private ArrayList prepareData() { 

for (int i = 0; i < book_id.length; i++) { 
    BooksInfo booksInfo = new BooksInfo(); 
    booksInfo.setTitle(title[i]); 
    booksInfo.setPrice(price[i]); 
    booksInfo.setVol_no(vol_no[i]); 
    booksInfo.setStatus(status[i]); 
    booksInfo.setISBN(ISBN[i]); 
    booksInfo.setBook_id(book_id[i]); 
    booksInfo.setBrand(brand[i]); 
    booksInfo.setBook_code(book_code[i]); 
    booksInfo.setSku(sku[i]); 
    booksInfo.setLang(lang[i]); 
    books_list.add(booksInfo); 

} 


return books_list; 

}

,這是我的DataAdapter代碼。

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { 
    private ArrayList<BooksInfo> books; 
    private Context ctx; 
    private String qty; 

    private RecyclerView recyclerView; 
    public DataAdapter() 
    { 

    } 
    @NonNull 
    public OnItemCheckListener onItemCheckListener; 

    public DataAdapter(Context context, ArrayList<BooksInfo> books, RecyclerView recyclerView,String qty, OnItemCheckListener onItemCheckListener) { 
     this.books = books; 
     this.ctx = context; 
     this.qty = qty; 
     this.onItemCheckListener =onItemCheckListener; 
     this.recyclerView = recyclerView; 

    } 

    public interface OnItemCheckListener { 
     void onItemCheck(BooksInfo item,ViewHolder viewHolder); 
     void onItemUncheck(BooksInfo item,ViewHolder viewHolder); 
    } 

    public void swap(ArrayList<BooksInfo> datas){ 
     datas = new ArrayList<>(); 
     recyclerView.removeAllViews(); 
     books.clear(); 
     books.addAll(datas); 
     notifyDataSetChanged(); 

    } 

    @Override 
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(final DataAdapter.ViewHolder viewHolder, int i) { 



     final BooksInfo booksInfo = (BooksInfo) books.get(i); 

     viewHolder.tv_title.setText(booksInfo.getTitle()); 
     viewHolder.tv_price.setText(booksInfo.getPrice()); 
     viewHolder.tv_vol_no.setText(booksInfo.getVol_no()); 
     viewHolder.tv_status.setText(booksInfo.getStatus()); 
     viewHolder.tv_isbn.setText(booksInfo.getISBN()); 
     viewHolder.tv_book_id.setText(booksInfo.getBook_id()); 
     viewHolder.tv_brand.setText(booksInfo.getBrand()); 
     viewHolder.tv_sku.setText(booksInfo.getSku()); 

     viewHolder.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       viewHolder.cb_selection.setChecked(!(viewHolder.cb_selection.isChecked())); 
       if (viewHolder.cb_selection.isChecked()){ 
        onItemCheckListener.onItemCheck(booksInfo,viewHolder); 
//     viewHolder.tv_qty.setText(qty); 
       }else{ 
        onItemCheckListener.onItemUncheck(booksInfo,viewHolder); 
//     viewHolder.tv_qty.setText("0"); 
       } 

      } 
     }); 


    } 

    public void updateNotes(ArrayList notesList) { 
     books = notesList; 
    } 


    public void updateQty(String q) 
    { 
     qty =q; 

    } 

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




    public class ViewHolder extends RecyclerView.ViewHolder{ 
     public TextView tv_title,tv_price,tv_vol_no,tv_status,tv_isbn,tv_book_id,tv_brand,tv_sku,tv_qty; 
     public CheckBox cb_selection; 
     View itemView; 
     public ViewHolder(View itemView) { 
      super(itemView); 
      this.itemView = itemView; 

      tv_title = (TextView)itemView.findViewById(R.id.tv_title); 
      tv_price = (TextView) itemView.findViewById(R.id.tv_price); 
      tv_vol_no = (TextView) itemView.findViewById(R.id.tv_volno); 
      tv_status = (TextView) itemView.findViewById(R.id.tv_status); 
      tv_isbn = (TextView) itemView.findViewById(R.id.tv_isbn); 
      tv_book_id = (TextView) itemView.findViewById(R.id.tv_bookid); 
      tv_brand = (TextView) itemView.findViewById(R.id.tv_brand); 
      cb_selection = (CheckBox) itemView.findViewById(R.id.cb_selection); 
      cb_selection.setClickable(false); 
      tv_sku = (TextView) itemView.findViewById(R.id.tv_sku); 
      tv_qty = (TextView) itemView.findViewById(R.id.tv_qty); 
     } 

     public void setOnClickListener(View.OnClickListener onClickListener) { 
      itemView.setOnClickListener(onClickListener); 
     } 
    } 

} 

任何幫助或建議表示讚賞。謝謝。

+0

,你已經創建了books_list對象? –

+0

@Sandeepdhiman請在我的post.Thank您結束檢查prepareData方法。 – anup

回答

1

通知您的適配器將對象轉換之前

mAdapter.notifyDataSetChanged(); 
0

清楚你的數組列表以反映更改:設置一個新的適配器之前,你回收

private ArrayList prepareData() { 
       books_list.clear(); 
       for (int i = 0; i < book_id.length; i++) { 
        BooksInfo booksInfo = new BooksInfo(); 
        booksInfo.setTitle(title[i]); 
        booksInfo.setPrice(price[i]); 
        booksInfo.setVol_no(vol_no[i]); 
        booksInfo.setStatus(status[i]); 
        booksInfo.setISBN(ISBN[i]); 
        booksInfo.setBook_id(book_id[i]); 
        booksInfo.setBrand(brand[i]); 
        booksInfo.setBook_code(book_code[i]); 
        booksInfo.setSku(sku[i]); 
        booksInfo.setLang(lang[i]); 
        books_list.add(booksInfo);    
       }      
       return books_list; 
      } 
+0

謝謝@vivekmahajan我試過這個,但它不適合我。與此方法public void交換(ArrayList的 DATAS){ DATAS =新的ArrayList <>() – anup

0

調用此方法

removeAllViews()

0

僅清除您的適配器的數據,新數據添加到它,然後調用notifyDataSetChanged()您的適配器:

yourDataList.clear(); 
yourDataList.addNewObjects(); 
adapter.notifyDataSetChanged(); 
+0

您好戈我累這樣做; books.clear(); books.addAll(datas); notifyDataSetChanged(); }但它沒有爲我工作。 – anup

+0

@anup您可以編輯您的問題,並在嘗試使用notifyDataSetChanged()的地方發佈完整的代碼嗎?讓我看看有什麼可能是錯的。 – yrazlik

+0

請檢查我的更新代碼。 – anup