2016-03-29 8 views

risposta

5

È possibile raggiungerlo utilizzando la libreria SectionedRecyclerViewAdapter. Ha il concetto di "Sezioni" e ogni sezione può avere la propria intestazione.

Mi sembra che sia necessario raggruppare le chiamate per "data". Quindi è possibile creare la classe Sezione in questo modo:

class MySection extends StatelessSection { 

    String date; 
    List<Call> callList; 

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

     this.date = date; 
     this.callList = callList; 
    } 

    @Override 
    public int getContentItemsTotal() { 
     return callList.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(callList.get(position).getContactName()); 
    } 

    @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(date); 
    } 
} 

Quindi impostare la RecyclerView con le Sezioni:

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

MySection mySection1 = new MySection("27 Mar, 2016", callList1); 
MySection mySection2 = new MySection("28 Mar, 2016", callList2); 

// Add your Sections 
sectionAdapter.addSection(mySection1); 
sectionAdapter.addSection(mySection2); 

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

Grazie amico. Questa libreria ha funzionato – hunkhusain

5

Fate una lista nel costruttore di elementi:

private ArrayList<Item> list; 

... 
public AdapterMain() { 
    list.add(new HeaderItem()); 
    list.add(new NormalItem()); 
    list.add(new HeaderItem()); 
    list.add(new NormalItem()); 
} 


public Item getItem(int position) { 
    return list.get(position); 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    if (viewType == Item.TYPE_NORMAL) { 
     View v = inflater.inflate(R.layout.adapter_normal, viewGroup, false); 
     return new NormalViewHolder(v); 
    } else if (viewType == Item.TYPE_HEADER) { 
     View v = inflater.inflate(R.layout.adapter_header, viewGroup, false); 
     return new HeaderViewHolder(v); 
    } 
    return null; 
} 


@Override 
public int getItemViewType(int position) { 
    return list.get(position).getItemType(); 
} 

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

public abstract class Item { 
    public static final int TYPE_HEADER = 0; 
    public static final int TYPE_NORMAL = 1; 
    public abstract void bindToViewHolder(RecyclerView.ViewHolder holder); 
    public abstract int getItemType(); 
} 

Il voce intestazione effettiva: (Crea anche una classe NormalItem e una classe NormalViewHolder)

public class HeaderItem extends Item { 
    public HeaderItem() { 
     super(); 
    } 

    @Override 
    public void bindToViewHolder(RecyclerView.ViewHolder viewholder) { 
     HeaderItem holder = (HeaderItem) viewholder; 
     holder.title.setText("Header"); 
    } 

    @Override 
    public int getItemType() { 
     return Item.TYPE_HEADER; 
    } 
} 

public class HeaderViewHolder extends RecyclerView.ViewHolder { 
    TextView title; 

    public HeaderViewHolder(View itemView) { 
     super(itemView); 
     title = itemView.findViewById(R.id.textview); 
    } 
} 
Problemi correlati