package com.aykj.recyclerviewdemo;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.Collections;
import java.util.List;
/**
*这个是瀑布流形式的适配器
*/
public class StaggergridAdapter extends RecyclerView.Adapter<StaggergridAdapter.MyViewHodler> implements onMoveAndSwipedListener{
private LayoutInflater inflater;
private List<String> list;
private Context context;
private View mHeaderView;
private View viewTypeLayout;
// 底部控件
private View mFooterView;
private boolean isHasHeader = false;
private boolean isHasFooter = false;
public static final int TYPE_HEADER = 0;
public static final int TYPE_FOOTER = 1;
public static final int TYPE_LEFT = 2;
public static final int TYPE_RIGHT= 3;
public StaggergridAdapter(List<String> list, Context context) {
this.context = context;
this.list = list;
inflater = LayoutInflater.from(context);
}
@Override
public StaggergridAdapter.MyViewHodler onCreateViewHolder(ViewGroup parent, int viewType) {
//listview中的 getView方法 用于view的复用
viewTypeLayout = inflater.inflate(R.layout.activity_listview, parent, false);
StaggergridAdapter.MyViewHodler holder = new StaggergridAdapter.MyViewHodler(viewTypeLayout);
if (viewType == TYPE_FOOTER) {
// 如果是底部类型,返回底部视图
StaggeredGridLayoutManager.LayoutParams clp = (StaggeredGridLayoutManager.LayoutParams) mFooterView.getLayoutParams();
clp.setFullSpan(true);
return new StaggergridAdapter.MyViewHodler(mFooterView);
}
if (viewType == TYPE_HEADER) {
//头部视图
StaggeredGridLayoutManager.LayoutParams clp = (StaggeredGridLayoutManager.LayoutParams) mHeaderView.getLayoutParams();
clp.setFullSpan(true);
return new StaggergridAdapter.MyViewHodler(mHeaderView);
}if(viewType==TYPE_LEFT){
viewTypeLayout=inflater.inflate(R.layout.activity_layoutgrid,parent,false);
return new StaggergridAdapter.MyViewHodler(viewTypeLayout);
}if(viewType==TYPE_RIGHT){
viewTypeLayout=inflater.inflate(R.layout.activity_listview,parent,false);
return new StaggergridAdapter.MyViewHodler(viewTypeLayout);
}
return holder;
}
@Override
public void onBindViewHolder(MyViewHodler holder, int position) {
//相当于listview适配器中的getitem()方法;
if (isHasHeader && isHasFooter) {
// 有头布局和底部时,向前便宜一个,且最后一个不能绑定数据
if (position == 0 || position == list.size() + 1) {
return;
}
int pos = getRealPosition(holder);
String data =list.get(pos);
if (holder instanceof MyViewHodler) {
holder.textView.setText(data);
}
}
}
public int getRealPosition(RecyclerView.ViewHolder holder) {
if (isHasHeader = true) {
int position = holder.getLayoutPosition();
return mHeaderView == null ? position : position - 1;
}
if (isHasFooter = true) {
int position = holder.getLayoutPosition();
return mFooterView == null ? position : position + 1;
}
return 0;
}
public void addll(List<String> data){
this.list.addAll(data);
notifyDataSetChanged();
}
@Override
public int getItemCount() {
int size = list.size();
if (isHasFooter)
size++;
if (isHasHeader)
size++;
return size;
}
public void setHeaderView(View headerView) {
mHeaderView = headerView;
isHasHeader = true;
notifyItemInserted(0);
}
/**
* 添加底部视图
*
*
@param footer
*/
public void setFooterView(View footer) {
mFooterView = footer;
isHasFooter = true;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if(isHasHeader&&position==0){
return TYPE_HEADER;
}
if(isHasFooter&&isHasHeader&&position==list.size()+1){
return TYPE_FOOTER;
}if(position%2==0){
//position取余,就是让itme使用不同的布局
return TYPE_LEFT;
}else {
return TYPE_RIGHT;
}
}
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
if(fromPosition<=list.size()){
//交换mItems数据的位置
Collections.swap(list,fromPosition-1,toPosition-1);
//交换RecyclerView列表中item的位置
notifyItemMoved(fromPosition,toPosition);
}
return true;
}
@Override
public void onItemDismiss(int position) {
if(position<=list.size()) {
//删除mItems数据
list.remove(position - 1);
//删除RecyclerView列表对应item
notifyItemRemoved(position);
}
}
public class MyViewHodler extends RecyclerView.ViewHolder{
TextView textView;
ImageView imageView;
public MyViewHodler(View itemView) {
super(itemView);
textView= (TextView) itemView.findViewById(R.id.text_recyclerlistview);
imageView= (ImageView) itemView.findViewById(R.id.recyclerview_imag);
}
}
}