最近的RecycleView火的不要不要的,也确实,用着超级方便
先看效果图:
正式开始撸代码:
/**
* Created by Xie on 2016/3/4.
*/
public class HeaderBottomAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
//item类型
public static final int ITEM_TYPE_HEADER = 0;
public static final int ITEM_TYPE_CONTENT = 1;
public static final int ITEM_TYPE_BOTTOM = 2;
Context context;
LayoutInflater mLayoutInflater;
//模拟数据
List<String> list;
private int mHeaderCount = 1;//头部View个数
private int mBottomCount = 1;//底部View个数
public HeaderBottomAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
mLayoutInflater = LayoutInflater.from(context);
}
// 内容长度
public int getContentItemCount() {
return list.size();
}
/**
* 判断当前item是否是headview
*
* @param position
* @return
*/
public boolean isHeaderView(int position) {
return mHeaderCount != 0 && position < mHeaderCount;
}
/**
* 判断当前item是否是FooterView
*
* @param position
* @return
*/
public boolean isBottomView(int position) {
return mBottomCount != 0 && position >= (mHeaderCount + getContentItemCount());
}
@Override
public int getItemViewType(int position) {
int dataItemCount = getContentItemCount();
if (mHeaderCount != 0 && position < mHeaderCount) {
return ITEM_TYPE_HEADER;
} else if (mBottomCount != 0 && position >= (mHeaderCount + dataItemCount)) {
//底部View
return ITEM_TYPE_BOTTOM;
} else {
//内容View
return ITEM_TYPE_CONTENT;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ITEM_TYPE_HEADER) {
return new HeaderViewHolder(mLayoutInflater.inflate(R.layout.rv_header, parent, false));
} else if (viewType == ITEM_TYPE_BOTTOM) {
return new FooterViewHolder(mLayoutInflater.inflate(R.layout.rv_footer, parent, false));
} else if (viewType == ITEM_TYPE_CONTENT) {
return new ContentViewHolder(mLayoutInflater.inflate(R.layout.rv_item, parent, false));
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof HeaderViewHolder) {
} else if (holder instanceof FooterViewHolder) {
} else {
((ContentViewHolder) holder).textView.setText(list.get(position - mHeaderCount));
}
}
@Override
public int getItemCount() {
return mBottomCount + mHeaderCount + getContentItemCount();
}
/**
* 内容的viewHolder
*/
public static class ContentViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ContentViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.tv_item_text);
}
}
/**
* 头部的viewHolder
* 不对内部做处理,只显示
*/
public static class HeaderViewHolder extends RecyclerView.ViewHolder {
public HeaderViewHolder(View itemView) {
super(itemView);
}
}
/**
* 根viewHolder
*/
public static class FooterViewHolder extends RecyclerView.ViewHolder {
public FooterViewHolder(View itemView) {
super(itemView);
}
}
}
public class TestRecycleActivity extends ActivitySupport implements View.OnClickListener {
HeaderBottomAdapter adapter;
RecyclerView recyclerView;
GridLayoutManager gridLayoutManager;
LinearLayoutManager layoutManager;
int mCount = 0;
List<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getActionBar();
if (null != actionBar) {
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setCustomView(R.layout.title_bar_common);
}
setContentView(R.layout.test_recycle);
initData();
recyclerView = (RecyclerView) findViewById(R.id.rv_list);
adapter = new HeaderBottomAdapter(this, list);
layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
gridLayoutManager = new GridLayoutManager(this, 2);
getRightView().setText("切换");
getRightView().setOnClickListener(this);
}
private void initData() {
list = new ArrayList<>();
for (int i = 0; i < 15; i++) {
list.add("A" + i);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.comm_right:
mCount++;
if (mCount >= 2) {
mCount = 0;
}
switch (mCount) {
case 0:
setRightText("linear布局");
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
break;
case 1:
setRightText("Grid布局");
recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setAdapter(adapter);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return (adapter.isHeaderView(position) || adapter.isBottomView(position)) ? gridLayoutManager.getSpanCount() : 1;
}
});
break;
}
break;
}
}
}