2017-05-10 37 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); 
     } 
    } 

} 

ありがとうございます。ありがとうございます。新しいアダプタを設定する前に、あなたのリサイクル業者に

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

? –

+0

@ Sandeepdhiman投稿の最後にprepareDataメソッドをチェックしてください。ありがとうございます。 – anup

答えて

1

mAdapter.notifyDataSetChanged(); 
0

明確なあなたの配列リストにオブジェクトを追加する前に、変更を反映するために、あなたのアダプタに通知。

+0

ありがとう@vivekmahajan私はこれを試みたが、それは私のためには動作しません。 – anup

0

コールこの方法

removeAllViews()

0

だけで、あなたのアダプタのデータをきれいにそれに新しいデータを追加して、あなたのアダプタのnotifyDataSetChanged()を呼び出す:

あなたbooks_listオブジェクトを作成した
yourDataList.clear(); 
yourDataList.addNewObjects(); 
adapter.notifyDataSetChanged(); 
+0

こんにちはbigO私はこのメソッドでこれをやってうんざりしました。public void swap(ArrayList datas){ datas = new ArrayList <>(); books.clear(); books.addAll(datas); notifyDataSetChanged(); }しかし、それは私のためには機能しませんでした。 – anup

+0

@anupあなたはあなたの質問を編集し、notifyDataSetChanged()を使用しようとするあなたの完全なコードを投稿できますか?何が間違っているのか見てみましょう。 – yrazlik

+0

私の更新されたコードを確認してください。 – anup

関連する問題