2015-01-08 10 views
61

मैं अभी भी अपने सिर को पुनर्नवीनीकरण के आसपास लाने की कोशिश कर रहा हूं। मेरे पास एक सरणीसूची है, जिसका उपयोग मैं रीसाइक्लिंग व्यू को आरंभ करने के लिए करता हूं।प्रोग्रामिंग के पुनर्नवीनीकरण के लिए एक नया आइटम जोड़ें?

मैं रीसाइक्लर व्यू पोस्ट में एडाप्टर और लेआउटमैनेजर सेट करने के लिए नए आइटम कैसे जोड़ सकता हूं?

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

मैं वह हूं जिसने स्वीकृत उत्तर का उत्तर दिया और मुझे लगता है कि यह स्वीकार्य होना चाहिए: डी –

25

बस अपने डेटा संरचना (mItems) को जोड़ने के लिए, और फिर डाटासेट परिवर्तन के बारे में अपने एडाप्टर सूचित

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

addItem("New Item"); 
+2

क्या होगा यदि यह एक स्ट्रिंग नहीं है जिसे मैं जोड़ना चाहता हूं, लेकिन एक व्यू ग्रुप? –

+1

@ इगोरगानापोलस्की मुझे भी यही संदेह है। क्या आपको इसके लिए कोई समाधान मिला? –

+0

यहां भी एक ही संदेह है! कोई मदद? –

6

यदि आप सूची उपयोग यह करने के लिए एक से अधिक आइटम जोड़ रहे हैं:

mAdapter.notifyItemRangeInserted(startPosition, itemcount); 

इस किसी भी पंजीकृत पर्यवेक्षकों है कि वर्तमान में परिलक्षित ITEMCOUNT positionStart पर शुरू आइटम नव डाला गया है सूचित करें। स्थिति स्टार्ट और उससे पहले स्थित आइटम अब स्थिति positin स्टार्ट + आइटम काउंटर

डेटासेट में मौजूदा आइटम को अभी भी अद्यतित माना जा सकता है।

-2

this.runOnUiThread(new Runnable() { 
    public void run() { 
     mAdapter.notifyDataChanged() 
    } 
}); 
संबंधित मुद्दे