RecyclerView是一个高度可定制性的View
本文将使用RecyclerView实现带header的grid
为了用RecyclerView创建一个带header的grid:
1,定义一个具有两种view类型的adapter,一个为header,一个为普通item。
2,nflate一个header,把它传递给adapter。
3,重写GridLayoutManager中的setSpanSizeLookup,在header所处的位置返回和span count (列数)相等的 span size。
import java.util.ArrayList;
import java.util.List;
import com.example.test.R;
import com.widget.view.HeaderAdapter.ViewHolder;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* 为了用RecyclerView创建一个带header的grid:
1,定义一个具有两种view类型的adapter,一个为header一个为普通item。
2,inflate一个header,把它传递给adapter。
3,重写GridLayoutManager中的setSpanSizeLookup,在header所处的位置返回和span count(列数)相等的 span size。
* @author Administrator
*
*/
public class HeaderAdapter extends RecyclerView.Adapter<ViewHolder> {
private static final int ITEM_VIEW_TYPE_HEADER = 0;
private static final int ITEM_VIEW_TYPE_ITEM = 1;
private final View header;
private final List<String> labels;
public HeaderAdapter(View header, int count) {
if (header == null) {
throw new IllegalArgumentException("header may not be null");
}
this.header = header;
this.labels = new ArrayList<String>(count);
for (int i = 0; i < count; ++i) {
labels.add(String.valueOf(i));
}
}
public boolean isHeader(int position) {
return position == 0;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ITEM_VIEW_TYPE_HEADER) {
return new ViewHolder(header);
}
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
if (isHeader(position)) {
return;
}
final String label = labels.get(position - 1); // Subtract 1 for header
holder.textView.setText(label);
}
@Override
public int getItemViewType(int position) {
return isHeader(position) ? ITEM_VIEW_TYPE_HEADER : ITEM_VIEW_TYPE_ITEM;
}
@Override
public int getItemCount() {
return labels.size() + 1;
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView textView;
public ViewHolder(View itemView) {
super(itemView);
if (onItemClickLitener != null){
itemView.setOnClickListener(this);
}
textView = (TextView) itemView.findViewById(R.id.item_0);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
onItemClickLitener.onItemClick(v, getLayoutPosition());//getPosition()被废弃了
}
}
private static OnItemClickLitener onItemClickLitener;
public void setOnItemClickLitener(OnItemClickLitener onItemClickLitener) {
this.onItemClickLitener = onItemClickLitener;
}
public interface OnItemClickLitener {
void onItemClick(View view, int position);
}
}
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
View header = LayoutInflater.from(this).inflate(R.layout.header_view, recyclerView, false);
final HeaderAdapter adapter = new HeaderAdapter(header, 30);
adapter.setOnItemClickLitener(new HeaderAdapter.OnItemClickLitener() {
@Override
public void onItemClick(View view, int position) {
// TODO Auto-generated method stub
if(adapter.isHeader(position)){
Toast.makeText(context, "header clicked", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "header item "+(position-1), Toast.LENGTH_SHORT).show();
}
}
});
final GridLayoutManager manager = new GridLayoutManager(this, 3);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return adapter.isHeader(position) ? manager.getSpanCount() : 1;
}
});
recyclerView.setLayoutManager(manager);
recyclerView.setAdapter(adapter);
具体描述看原帖,我只是稍稍改了一下
http://www.open-open.com/lib/view/open1437662138631.html
如果你觉得使用RecyclerView添加Header比较烦,那没办法,就使用这个
HeaderGridView类吧
RecyclerView 必知必会
http://mp.weixin.qq.com/s/CzrKotyupXbYY6EY2HP_dA
分享到:
相关推荐
本篇文章将详细探讨如何在RecyclerView中添加头部(RecyclerViewHeader),这是在很多应用中都需要实现的功能,比如在列表顶部展示广告或者分类标签。 首先,我们需要理解RecyclerView的工作原理。RecyclerView通过...
本教程将详细介绍如何使用RecyclerView来实现一个带有Header和Footer的效果,类似于GridView的功能。 首先,理解RecyclerView的基本架构是至关重要的。RecyclerView由Adapter、LayoutManager和ViewHolder三部分组成...
本文将深入探讨如何在RecyclerView中添加header和footer,以实现更丰富的界面布局。 RecyclerView是一个用于展示可滚动数据集的视图容器,它允许开发者通过Adapter来动态管理数据并渲染视图。添加header和footer是...
RxMagicEleme LinearEleme Grid目标Linkage-RecyclerView 的目标是:一行代码即可接入二级联动列表。除了一键接入而省去 99% 不必要的、复杂的、重复的工作外,你还可以从这个开源项目获得的内容包括:整洁的代码...
implementation 'com.github.castorflex.recyclerviewheader2:recyclerview-header:24.0.1' } ``` 然后,我们需要创建一个RecyclerView,并设置其适配器。在适配器中,我们将包含实际的数据列表。接着,创建一个...
本教程将深入讲解如何在RecyclerView中添加Header,以便更好地组织和展示数据。 首先,我们需要理解RecyclerView的基本结构。RecyclerView由LayoutManager、Adapter和ViewHolder三部分组成。LayoutManager负责布局...
本教程将深入探讨如何在RecyclerView中实现Header/Footer的添加,以及整合上拉加载和下拉刷新功能,这些都是现代应用中常见的交互模式。 首先,让我们了解RecyclerView的基本结构。RecyclerView是一个视图容器,它...
本项目“Android-可定制化的RecyclerView-Header”专注于实现一个通用的头部视图管理器,使得开发者能够轻松地为RecyclerView添加自定义的头部组件。 RecyclerView的核心特性包括: 1. **视图复用**:通过...
case TYPE_HEADER: return new HeaderViewHolder(headerView); case TYPE_FOOTER: return new FooterViewHolder(footerView); default: return new ItemViewHolder(LayoutInflater.from(parent.getContext())....
本文将详细讲解如何在Android应用中实现这个功能,特别是当使用RecyclerView时,无论是包含头部视图还是没有头部视图的情况。 首先,我们需要理解RecyclerView的基本用法。RecyclerView是Android SDK提供的一种高效...
RecyclerViewHeader Super fast and easy way to create header for Android RecyclerView. Lets you create header View for any RecyclerView that uses LinearLayoutManager or GridLayoutManager with just a...
实际上, RecyclerViewHeader只是一个简单问题的复杂解决方案。 不用使用此库,只需学习如何创建多类型的RecyclerView.Adapter 。 从长远来看,它将为您带来很多价值,这一点也不难。 查看“ Migration部分,以获取...
本话题主要围绕"RecyclerView_Header_Footer"展开,即如何在RecyclerView中添加头部(Header)和尾部(Footer)。 首先,我们来了解RecyclerView的基本结构。RecyclerView由Adapter和LayoutManager组成。Adapter...
在Android开发中,"无限轮播+RecyclerView添加Header"是一个常见的需求,特别是在设计首页、广告展示或者商品分类等场景。这个话题涵盖了两个主要的技术点:RecyclerView的使用以及无限轮播的实现。 首先,...
本教程将详细讲解如何在RecyclerView中添加Header和Footer,这对于构建复杂布局,如添加广告条或者底部操作按钮是非常实用的。 首先,我们需要理解RecyclerView的基本架构。RecyclerView由Adapter和LayoutManager两...
你可以根据需求添加Header、Footer,或者使用GridLayoutManager、StaggeredGridLayoutManager等其他布局管理器。另外,还可以实现Item点击事件、动画效果以及下拉刷新和上拉加载更多功能。 对于更复杂的需求,例如...
3. Header/Footer:在RecyclerView中添加头部或尾部视图。 通过以上讲解,我们了解了RecyclerView的基本概念、使用方法以及一些高级特性。实践中,开发者可以根据需求灵活运用这些知识点,打造高效且用户友好的列表...
{ header: 'Name', dataIndex: 'name', filterable: true }, // ... ], plugins: ['gridfilters'] }); ``` 这里,`filterable: true`告诉ExtJS该列需要提供头部过滤功能,而`plugins`数组则指定了GridHeader...