2016-04-01 14 views
6

Voglio che la stringa di chiavi debba funzionare come intestazione e che l'elenco debba essere gonfiato sotto quella chiave di mappa nello RecyclerView.Come gonfiare Hashmap <String, Lista <Items>> nel Recyclerview

Grazie per qualsiasi aiuto

public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ 

private WeakHashMap<String, List<VideoItem>> mData = new WeakHashMap<>(); 
private ArrayList<String> mKeys; 
ArrayList<WeakHashMap<String,List<VideoItem>>> hashMapArrayList; 

public Adapter(WeakHashMap<String, List<VideoItem>> mData, ArrayList<WeakHashMap<String,List<VideoItem>>> hashMapArrayList) { 
    this.mData = mData; 
    this.hashMapArrayList=hashMapArrayList; 
    mKeys = new ArrayList<String>(mData.keySet()); 
} 

public String getKey(int position) 
{ 
    return (String) mKeys.get(position); 
} 


@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.player_item, parent, false); 
    MyViewHolder holder=new MyViewHolder(v); 
    return holder; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    String key = getKey(position); 
    WeakHashMap<String, List<VideoItem>> value = hashMapArrayList.get(position); 
    MyViewHolder holder1=(MyViewHolder)holder; 
    holder1.header.setText(key); 
    holder1.value.setText(value.get(key).get(position).getDuration()); 
    Log.v("KEY",key); 
    Log.v("VALUE", String.valueOf(value)); 
} 

@Override 
public int getItemCount() { 
    return (null != hashMapArrayList ? hashMapArrayList.size() : 0); 

} 

// public ArrayList<WeakHashMap<String,List<VideoItem>>> getItem(int position) { 
//  return hashMapArrayList.get(mKeys.get(position)); 
// } 

@Override 
public long getItemId(int position) { 
    return position; 
} 
class MyViewHolder extends RecyclerView.ViewHolder{ 
    TextView header ; 
    TextView value; 
    public MyViewHolder(View itemView) { 
     super(itemView); 
     header= (TextView) itemView.findViewById(R.id.header); 
     value= (TextView) itemView.findViewById(R.id.task_name); 
    } 
} 

}

+0

inserisci il tuo codice adattatore, ti aiuteremo da lì – inkedTechie

+0

prova a usare questo: https://github.com/timehop/sticky-headers-recyclerview –

+0

voglio fare sezioni nel recyclerview utilizzando la chiave come sezioni e valore di lista in quelle sezioni –

risposta

1

si può raggiungere facilmente con la libreria SectionedRecyclerViewAdapter. È possibile raggruppare i tuoi articoli in sezioni e aggiungere un'intestazione a ciascuna sezione:

class MySection extends StatelessSection { 

    String title; 
    List<VideoItem> list; 

    public MySection(String title, List<VideoItem> list) { 
     // call constructor with layout resources for this Section header 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).getName()); 
    } 

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

Poi si imposta il RecyclerView con le Sezioni:

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

// Create your sections with the list of data from your HashMap 
for(Map.Entry<String, List<VideoItem>> entry : mData.entrySet()) { 
    MySection section = new MySection(entry.getKey(), entry.getValue()); 
    // add your section to the adapter 
    sectionAdapter.addSection(section); 

} 

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

Se non è possibile utilizzare librerie 3a parte che puoi dare un'occhiata a come è implementato here.

+0

hey grazie..sò lo proverò .. –

+0

@ShikhaRatra ha fatto funzionare la soluzione per te? – ymerdrengene

+0

@ymerdrengene sì ha funzionato, dai uno sguardo alla lib .... devi personalizzarlo in base alle tue necessità .... –

0

Prova questa

Map<String, List<String>> maplist = new HashMap<String, List<String>>(); 
List<String> arraylist = new ArrayList<String>(); 
arraylist.add("Sample text"); // Add more strings... 
maplist.put("key",arraylist); // Add more lists... 
+0

Ho i dati corretti come Map >. non so come gonfiare correttamente quei dati nel recyclerview come chiave come intestazione ed elenco sotto quella chiave –

Problemi correlati