2015-01-08 50 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() 
    } 
}); 
相关问题