2016-04-01 16 views
6

我希望密钥字符串必须充当标题,并且该列表必须在RecyclerView中的该映射密钥下充气。如何将哈希图<字符串,列表<Items>>充入回收站视图

感谢您的帮助

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

发布您的适配器代码,我们将从那里帮助 – inkedTechie

+0

尝试使用此:https://github.com/timehop​​/sticky-headers-recyclerview –

+0

我想使用键作为节和列表值中的回收站查看部分在那些部分 –

回答

1

可以与图书馆SectionedRecyclerViewAdapter轻松实现它。您可以将您的项目分成若干节和一个头添加到每个部分:

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

然后您设置RecyclerView与节:

// 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); 

如果你不能使用第三方库,你可以看看它是如何实施的here

+0

嘿谢谢..我会尝试.. –

+0

@ShikhaRatra为您做了解决方案吗? – ymerdrengene

+0

@ymerdrengene是它的工作,看看在lib ....你需要根据您的需要进行定制.... –

0

试试这个

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

我有适当的数据作为地图<字符串,列表>。我不知道如何在recyclerview中正确膨胀那些数据作为标题和列表下的密钥 –

相关问题