UltimateGridLayoutAdapter.java
|
package com.marshalchen.ultimaterecyclerview;
import android.annotation.TargetApi;
import android.os.Build;
import android.support.annotation.LayoutRes;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.marshalchen.ultimaterecyclerview.quickAdapter.easyRegularAdapter;
import java.util.List;
/**
* Created by hesk on 27/1/16.
*/
public abstract class UltimateGridLayoutAdapter<DATA, BINDER extends UltimateRecyclerviewViewHolder> extends easyRegularAdapter<DATA, BINDER> {
private boolean mValid = true;
private int span_columns;
public UltimateGridLayoutAdapter(List<DATA> items) {
super(items);
span_columns = 1;
}
public void setSpanColumns(int columns) {
span_columns = columns;
}
private int normalDataConv(final int rpos) {
int orgin = rpos;
int size = getAdapterItemCount();
if (hasHeaderView()) orgin -= 1;
int out = orgin >= size - 1 ? size - 1 : orgin;
return out;
}
@Override
public UltimateRecyclerviewViewHolder getViewHolder(View view) {
UltimateRecyclerviewViewHolder g = new UltimateRecyclerviewViewHolder(view);
return g;
}
protected View getViewById(@LayoutRes final int layoutId, ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
return view;
}
@Override
public UltimateRecyclerviewViewHolder onCreateHeaderViewHolder(ViewGroup parent) {
return new UltimateRecyclerviewViewHolder(parent);
}
@Override
public int getAdapterItemCount() {
return mValid ? super.getAdapterItemCount() : 0;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public long generateHeaderId(int position) {
return View.generateViewId();
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final int current_type = getItemViewType(position);
if (VIEW_TYPES.HEADER == current_type) {
onBindHeaderViewHolder(holder, position);
} else if (VIEW_TYPES.NORMAL == current_type) {
bindNormal((BINDER) holder, getItem(getItemDataPosFromInternalPos(position)), position);
} else if (VIEW_TYPES.FOOTER == current_type) {
onFooterCustomerization(holder, position);
}
}
protected void onFooterCustomerization(RecyclerView.ViewHolder view, int position) {
}
/**
* normally you dont need to do anything for this implementation.
*
* @param holder the data holder
* @param position position to render
*/
@Override
public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder, int position) {
// Log.d("ascc", position + " : ");
}
protected abstract void bindNormal(BINDER b, DATA data, final int position);
public static class GridSpan extends GridLayoutManager.SpanSizeLookup {
final private int columns;
final private int intervalRow;
final private UltimateGridLayoutAdapter mGridAdapter;
public GridSpan(int col, int intervalRow, UltimateGridLayoutAdapter mGridAdapter) {
this.columns = col;
this.intervalRow = intervalRow;
this.mGridAdapter = mGridAdapter;
}
/**
* Returns the number of span occupied by the item at <code>position</code>.
*
* @param position The adapter position of the item
* @return The number of spans occupied by the item at the provided position
*/
@Override
public int getSpanSize(int position) {
if (position == mGridAdapter.getAdapterItemCount()) {
return columns;
} else {
int mIntervalHeader = columns * intervalRow;
int h = position % mIntervalHeader == 0 ? columns : 1;
return h;
}
}
}
}