2015-01-08 49 views
61

我仍然試圖讓我的頭圍繞recyclerview。 我有一個arraylist,我用它來初始化一個回收站視圖。以編程方式向recyclerview添加一個新項目?

如何將新項目添加到回收站視圖後期設置適配器和layoutmanager?

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

所以基本上在我initdata()initRecyclerView(),如何添加一個新的項目到RecyclerView?

+0

你可以看到[在Github上這個示例](https://github.com/CabezasGonzalezJavier/FullRecycleView/tree/master/app/src/main/java/com/thedeveloperworldisyours/fullrecycleview/垂直)愉快的代碼! – Cabezas

回答

176

首先你的項目添加到mItems,然後使用:

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

比優於使用:

mAdapter.notifyDataSetChanged(); 

表現中。

+9

很好的答案。這也意味着它不會破壞動畫 –

+7

這應該被接受爲正確的答案,另外一個動畫破壞並且效率比這個低。 – Massimo

+20

我是回答接受的答案的人,我認爲這應該是可接受的答案:D –

25

只需添加到您的數據結構(mItems),然後通知適配器有關數據集變化

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

addItem("New Item"); 
+2

如果它不是我想添加的字符串,但ViewGroup? –

+1

@IgorGanapolsky我也有同樣的疑問。你有沒有找到解決方案? –

+0

同樣也有疑問!任何幫助? –

6

如果添加多個項目到列表中使用這樣的:

mAdapter.notifyItemRangeInserted(startPosition, itemcount); 

此通知所有已註冊的觀察人士開始positionStart目前反映ITEMCOUNT項目已被新插入。先前位於startStart及以後的項目現在可以從positinStart + itemCount

開始位於數據集中仍然被視爲最新的現有項目。

-2

this.runOnUiThread(new Runnable() { 
    public void run() { 
     mAdapter.notifyDataChanged() 
    } 
}); 
相關問題