2015-01-08 22 views
61

Tôi vẫn đang cố gắng thu hút sự chú ý của mình. Tôi có một danh sách, mà tôi sử dụng để khởi tạo một chế độ xem tái chế với.Thêm một mục mới để recyclerview lập trình?

Tôi làm cách nào để thêm các mục mới vào bài đăng xem của người tái chế thiết lập bộ điều hợp và trình sắp xếp bố cục?

private void initData() { 
     mItems = new ArrayList<String>(); 
     for (int i = 0; i < ITEMS_COUNT; i++) { 
      mItems.add("Item " + (i + 1)); 
     } 
    } 

    private void initRecyclerView() { 
     mRecentRecyclerView = (RecyclerView) findViewById(R.id.recentrecyclerView); 
     mRecentRecyclerView.setHasFixedSize(true); 
     mRecentLayoutManager = new LinearLayoutManager(this); 
     mRecentRecyclerView.setLayoutManager(mRecentLayoutManager); 



     mAdapter = new RecyclerView.Adapter<CustomViewHolder>() { 
      @Override 
      public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
       View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.notice_snippet 
         , viewGroup, false); 
       return new CustomViewHolder(view); 
      } 

      @Override 
      public void onBindViewHolder(CustomViewHolder viewHolder, int i) { 
       viewHolder.noticeSubject.setText(mItems.get(i)); 
      } 

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

     }; 
     mRecentRecyclerView.setAdapter(mAdapter); 

    private class CustomViewHolder extends RecyclerView.ViewHolder { 

     private TextView noticeSubject; 

     public CustomViewHolder(View itemView) { 
      super(itemView); 

      noticeSubject = (TextView) itemView.findViewById(R.id.notice_subject); 
     } 
    } 

Vì vậy, về cơ bản sau khi tôi initdata()initRecyclerView(), làm thế nào để thêm một mục mới vào RecyclerView ??

+0

Bạn có thể xem [ví dụ này trong Github] (https://github.com/CabezasGonzalezJavier/FullRecycleView/tree/master/app/src/main/java/com/thedeveloperworldisyours/fullrecycleview/ dọc) Happy code !!! – Cabezas

Trả lời

176

Đầu tiên thêm mặt hàng của bạn để mItems và sau đó sử dụng:

mAdapter.notifyItemInserted(mItems.size() - 1); 

hơn là tốt hơn so với sử dụng:

mAdapter.notifyDataSetChanged(); 

về hiệu suất.

+9

Câu trả lời hay. Nó cũng có nghĩa là nó sẽ không phá vỡ hình ảnh động –

+7

Điều này sẽ được chấp nhận là câu trả lời đúng, câu trả lời khác sẽ phá vỡ hoạt ảnh và kém hiệu quả hơn ảnh động này. – Massimo

+20

Tôi là một trong những người trả lời câu trả lời được chấp nhận và tôi nghĩ rằng đây nên là một trong những chấp nhận: D –

25

chỉ đơn giản là thêm vào cấu trúc dữ liệu của bạn (mItems), và sau đó thông báo cho bộ chuyển đổi của bạn về sự thay đổi dữ liệu

private void addItem(String item) { 
    mItems.add(item); 
    mAdapter.notifyDataSetChanged(); 
} 

addItem("New Item"); 
+2

Nếu nó không phải là một chuỗi tôi muốn thêm, nhưng một ViewGroup? –

+1

@IgorGanapolsky Tôi cũng có cùng một nghi ngờ. Bạn có tìm thấy giải pháp nào cho điều đó không? –

+0

nghi ngờ tương tự ở đây quá! bất kỳ giúp đỡ? –

6

nếu bạn đang thêm nhiều mục vào danh sách sử dụng này:

mAdapter.notifyItemRangeInserted(startPosition, itemcount); 

này thông báo cho bất kỳ nhà quan sát đã đăng ký rằng các mục ItemCount hiện phản ánh bắt đầu từ positionStart mới đã được chèn vào. Bạn có thể tìm thấy mục trước đây tại vị tríBắt đầu và hơn thế nữa tại vị trí positinStart + itemCount

mục hiện tại trong tập dữ liệu vẫn được cập nhật.

-2

this.runOnUiThread(new Runnable() { 
    public void run() { 
     mAdapter.notifyDataChanged() 
    } 
}); 
Các vấn đề liên quan