2015-06-10 12 views
20

अपने आवेदन में मैं recyclerview उपयोग कर रहा हूँ सभी संपर्क सूची प्रदर्शित करने के लिए दो वर्गों जोड़ें। मैं पुनर्नवीनीकरण में दो खंड चाहता हूं।recyclerview एंड्रॉयड

एक अनुभाग की तरह अपने आवेदन संपर्क सूची है और दूसरे खंड मेरे फोन संपर्क सूची है।

इस

enter image description here

की तरह वहाँ यह करने के लिए कोई भी तरीका है?

किसी को भी यह कैसे करना है पता है?

+2

आप अपने प्रयासों को दिखाने या अधिक विस्तृत – Abhishek

+2

इस http देख कृपया: // stackoverflow।कॉम/प्रश्न/26245139/कैसे-से-निर्माण-रीसाइक्लिंग-के-बहु-दृश्य-प्रकार –

+1

इस उत्तर पर एक नज़र डालें: http://stackoverflow.com/a/34464367/2739684 –

उत्तर

11

यदि आपके पास पहले से RecyclerView है, तो अनुभागों को लागू करने का एक आसान तरीका गैब्रिएल मारियोटी के SimpleSectionedRecyclerViewAdapter का उपयोग कर रहा है।

//Your RecyclerView 
mRecyclerView = (RecyclerView) findViewById(R.id.list); 
mRecyclerView.setHasFixedSize(true); 
mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
mRecyclerView.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL)); 

//Your RecyclerView.Adapter 
mAdapter = new SimpleAdapter(this,sCheeseStrings); 


//This is the code to provide a sectioned list 
List<SimpleSectionedRecyclerViewAdapter.Section> sections = 
     new ArrayList<SimpleSectionedRecyclerViewAdapter.Section>(); 

//Sections 
sections.add(new SimpleSectionedRecyclerViewAdapter.Section(0,"Section 1")); 
sections.add(new SimpleSectionedRecyclerViewAdapter.Section(5,"Section 2")); 
sections.add(new SimpleSectionedRecyclerViewAdapter.Section(12,"Section 3")); 
sections.add(new SimpleSectionedRecyclerViewAdapter.Section(14,"Section 4")); 
sections.add(new SimpleSectionedRecyclerViewAdapter.Section(20,"Section 5")); 

//Add your adapter to the sectionAdapter 
SimpleSectionedRecyclerViewAdapter.Section[] dummy = new SimpleSectionedRecyclerViewAdapter.Section[sections.size()]; 
SimpleSectionedRecyclerViewAdapter mSectionedAdapter = new 
      SimpleSectionedRecyclerViewAdapter(this,R.layout.section,R.id.section_text,mAdapter); 
mSectionedAdapter.setSections(sections.toArray(dummy)); 

//Apply this adapter to the RecyclerView 
mRecyclerView.setAdapter(mSectionedAdapter); 
+0

उसी उदाहरण में आप बता सकते हैं इस कोज़ को एक टुकड़े में कैसे लागू करें, और sheheeseStrings में getdata कैसे करें। –

+0

आप हेडर के लिए कस्टम लेआउट कैसे जोड़ते हैं? –

11

आप देख रहे हैं एक समाधान है कि हार्डकोडेड हैडर/पंक्ति अनुक्रमित उपयोग करने के लिए की जरूरत नहीं है के लिए, आप पुस्तकालय SectionedRecyclerViewAdapter उपयोग कर सकते हैं:

मैं तुम्हें अपने उदाहरण पेस्ट करें।

class MySection extends StatelessSection { 

    String title; 
    List<String> list; 

    public MySection(String title, List<String> list) { 
     // call constructor with layout resources for this Section header, footer and items 
     super(R.layout.section_header, R.layout.section_item); 

     this.title = title; 
     this.list = list; 
    } 

    @Override 
    public int getContentItemsTotal() { 
     return list.size(); // number of items of this section 
    } 

    @Override 
    public RecyclerView.ViewHolder getItemViewHolder(View view) { 
     // return a custom instance of ViewHolder for the items of this section 
     return new MyItemViewHolder(view); 
    } 

    @Override 
    public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { 
     MyItemViewHolder itemHolder = (MyItemViewHolder) holder; 

     // bind your view here 
     itemHolder.tvItem.setText(list.get(position)); 
    } 

    @Override 
    public RecyclerView.ViewHolder getHeaderViewHolder(View view) { 
     return new SimpleHeaderViewHolder(view); 
    } 

    @Override 
    public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) { 
     MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder; 

     // bind your header view here 
     headerHolder.tvItem.setText(title); 
    } 

    public void addRow(String item) { 
     this.list.add(item); 
    } 

} 

तो फिर आप अपने वर्गों के साथ RecyclerView की स्थापना:

पहले समूह के लिए एक धारा वर्ग अपने आइटम बनाए बिना

// Create an instance of SectionedRecyclerViewAdapter 
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); 

// Create your sections with the list of data 
MySection favoritesSection = new MySection("Favorites", favoritesList); 
MySection contactsSection = new MySection("Add Favorites", contactsList); 

// Add your Sections to the adapter 
sectionAdapter.addSection(favoritesSection); 
sectionAdapter.addSection(contactsSection); 

// Set up your RecyclerView with the SectionedRecyclerViewAdapter 
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
recyclerView.setAdapter(sectionAdapter); 

आप भी अपने वर्गों के लिए नई पंक्तियाँ जोड़ सकते हैं पुनर्गणना अनुक्रमित:

favoritesSection.addRow("new item"); 
sectionAdapter.notifyDataSetChanged(); 
+0

क्या प्रत्येक अनुभाग की वस्तुओं की सूची के लिए न्यूनतम ऊंचाई निर्धारित करने का कोई तरीका है, यदि सूची बहुत कम है, तो अगले अनुभाग से पहले भी इसकी कुछ ऊंचाई होगी? –

+0

साथ ही, क्या प्रदर्शित करने के लिए कोई सामग्री आइटम नहीं होने पर कुछ प्रदर्शित करने का कोई तरीका है? –

3

एल और मैं एक देशी समाधान का प्रस्ताव देने की कोशिश करता हूं।

आप isFavourite और CONTACTNAME like this

पास है कि आपके ContactRecyclerAdapter की सूची के आधार पर कि सरणी की तरह

private class Contacts{ 
    private String name; 
    private String phoneNumber; 
    private boolean isFavourite; 
} 

तरह isFavourite के ध्वज के साथ संपर्क के सूची होनी चाहिए। और हैडर के लिए दो अलग अलग लेआउट और आइटम like this

0

का प्रयोग करें Github पर मेरे पुस्तकालय पर एक नजर डालें, करने के लिए इस्तेमाल किया जा सकता आसानी से वर्गों बनाने के लिए: RecyclerAdapter & Easy Section

mRecylerView.setLayoutManager(...); 
/*create Adapter*/ 
RecyclerAdapter<Customer> baseAdapter = new RecyclerAdapter<>(...); 
/*create sectioned adapter. the Adapter type can be RecyclerView.Adapter*/ 
SectionedAdapter<String, RecyclerAdapter> adapter = new SectionedAdapter<>(SectionViewHolder.class, baseAdapter); 
/*add your sections*/ 
sectionAdapter.addSection(0/*position*/, "Title Section 1"); 
/*attach Adapter to RecyclerView*/ 
mRecylerView.setAdapter(sectionAdapter); 

आशा है कि यह मदद करता है।