public abstract class RecyclerViewAdapter<
H extends RecyclerView.ViewHolder
, VH extends RecyclerView.ViewHolder>
extends RecyclerView.Adapter<RecyclerView.ViewHolder>
{
protected static final int TYPE_HEADER =
1;
protected static final int TYPE_ITEM =
2;
private int[]
groupForPosition =
null;
private int[]
positionWithInSection =
null;
public boolean[]
isHeader =
null;
int count =
0;
public RecyclerViewAdapter()
{
super()
;
registerAdapterDataObserver(
new DataObserver())
;
}
private void initIndex()
{
count = getItemCount()
;
initAuxiliaryArrays(
count)
;
precomputeIndices()
;
}
private void initAuxiliaryArrays(
int count)
{
groupForPosition =
new int[count]
;
positionWithInSection =
new int[count]
;
isHeader =
new boolean[count]
;
}
private void precomputeIndices()
{
int groupCount = getGroupCount()
;
int index =
0;
for (
int i =
0; i < groupCount
; i++)
{
setPrecomputedItem(index
, true, i
, 0)
;
index++
;
for (
int j =
0; j < getItemCountForGroup(i)
; j++)
{
setPrecomputedItem(index
, false, i
, j)
;
index++
;
}
}
}
private void setPrecomputedItem(
int index
, boolean isHeader
, int groupCount
,
int position)
{
this.
isHeader[index] = isHeader
;
this.
groupForPosition[index] = groupCount
;
this.
positionWithInSection[index] = position
;
}
@Override
public int getItemCount()
{
int ItemCount =
0;
int groupCount = getGroupCount()
;
for (
int i =
0; i < groupCount
; i++)
{
ItemCount +=
1 + getItemCountForGroup(i)
;
}
return ItemCount
;
}
protected abstract int getGroupCount()
;
protected abstract int getItemCountForGroup(
int groupCount)
;
@Override
public RecyclerView.ViewHolder
onCreateViewHolder(ViewGroup parent
,
int viewType)
{
RecyclerView.ViewHolder viewHolder =
null;
switch (viewType)
{
case TYPE_HEADER:
viewHolder = onCreateViewHolderHeader(parent
, viewType)
;
break;
case TYPE_ITEM:
viewHolder = onCreateViewHolderItem(parent
, viewType)
;
break;
}
return viewHolder
;
}
protected abstract H onCreateViewHolderHeader(ViewGroup parent
,
int viewType)
;
protected abstract VH onCreateViewHolderItem(ViewGroup parent
,
int viewType)
;
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder
, int position)
{
int groupPosition =
groupForPosition[position]
;
int index =
positionWithInSection[position]
;
if (
isHeader[position])
{
onBindViewHolderHeader((
H) holder
, groupPosition)
;
}
else
{
onBindViewHolderItem((
VH) holder
, groupPosition
, index)
;
}
}
protected abstract void onBindViewHolderHeader(
H holder
, int groupPosition)
;
protected abstract void onBindViewHolderItem(
VH holder
, int groupPosition
,
int index)
;
@Override
public int getItemViewType(
int position)
{
if (
isHeader[position])
{
return TYPE_HEADER;
}
else
{
return TYPE_ITEM;
}
}
private class DataObserver
extends RecyclerView.AdapterDataObserver
{
@Override
public void onChanged()
{
super.onChanged()
;
initIndex()
;
}
}
}
public class MyRecyclerViewAdapter
extends
RecyclerViewAdapter<MyRecyclerViewAdapter.HolderHeader
,MyRecyclerViewAdapter.HolderItem>
{
private Context
mContext;
private List<String>
groupList;
private List<List<Item>>
childList;
private LayoutInflater
mInflater;
private SparseBooleanArray
sparseBooleanArray;
private int mobile_width,getMobile_height;
private String
mtarget;
private ItemClickListener
itemClickListener;
public MyRecyclerViewAdapter(Context context
, ItemClickListener mOnClick)
{
mContext = context
;
mInflater = LayoutInflater.
from(context)
;
sparseBooleanArray =
new SparseBooleanArray()
;
mobile_width = MainActivity.
mobile_width;
mobile_height = MainActivity.
mobile_height;
this.
itemClickListener= mOnClick
;
}
// private DisplayImageOptions options_image, options_video;
// private void initImageLoader() {
//
// // 使用DisplayImageOptions.Builder()创建DisplayImageOptions
// // 设置图片下载期间显示的图片
// options_image = new DisplayImageOptions.Builder()
// .showImageOnLoading(R.drawable.imageload_image_defaut) // 设置图片下载期间显示的图片
// .showImageForEmptyUri(R.drawable.x) // 设置图片Uri为空或是错误的时候显示的图片
// .showImageOnFail(R.drawable.x) // 设置图片加载或解码过程中发生错误显示的图片
// .cacheInMemory(true) // 设置下载的图片是否缓存在内存中
// .cacheOnDisk(true) // 设置下载的图片是否缓存在SD卡中
// .displayer(new MyRoundedBitmapDisplayer(20)) // 设置成圆角图片
// .build();
// options_video = new DisplayImageOptions.Builder()
// .showImageOnLoading(R.drawable.imageload_video_defaut) // 设置图片下载期间显示的图片
// .showImageForEmptyUri(R.drawable.x) // 设置图片Uri为空或是错误的时候显示的图片
// .showImageOnFail(R.drawable.x) // 设置图片加载或解码过程中发生错误显示的图片
// .cacheInMemory(true) // 设置下载的图片是否缓存在内存中
// .cacheOnDisk(true) // 设置下载的图片是否缓存在SD卡中
// .displayer(new MyRoundedBitmapDisplayer(20)) // 设置成圆角图片
// .build();
//
// }
public void setData(List<String> group_list
, List<List<Item>> childData_list)
{
groupList = group_list
;
childList = childData_list
;
notifyDataSetChanged()
;
}
@Override
protected int getGroupCount() {
return groupList.size()
;
}
@Override
protected int getItemCountForGroup(
int groupCount) {
return childList.get(groupCount).size()
;
}
@Override
protected HolderHeader
onCreateViewHolderHeader(ViewGroup parent
, int viewType)
{
return new HolderHeader(
mInflater.inflate(R.layout.
item_choose_recycler_head,parent
,false))
;
}
@Override
protected HolderItem
onCreateViewHolderItem(ViewGroup parent
, int viewType) {
return new HolderItem(
mInflater.inflate(R.layout.
item_choose_child_recycler,parent
,false))
;
}
@Override
protected void onBindViewHolderHeader(HolderHeader holder
, int groupPosition) {
holder.
tv.setText(
groupList.get(groupPosition))
;
}
@Override
protected void onBindViewHolderItem(
final HolderItem holder
, final int groupPosition
, int index) {
final Item item =
childList.get(groupPosition).get(index)
;
holder.
textView.setText(item.getName())
;
ViewGroup.LayoutParams params = holder.
iv_icon.getLayoutParams()
;
holder.
relativeLayout.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (
holder.
checkBox.isChecked())
{
holder.
checkBox.setChecked(
false)
;
}
else
{
holder.
checkBox.setChecked(
true)
;
}
itemClickListener.itemClick(
groupList.get(
groupPosition)
,item)
;
}
})
;
params.
width =
mobile_width /
4;
params.
height =
mobile_height /
4;
holder.
iv_icon.setLayoutParams(params)
;
}
class HolderHeader
extends RecyclerView.ViewHolder
{
public TextView
tv;
public HolderHeader(View itemView)
{
super(itemView)
;
tv = (TextView) itemView.findViewById(R.id.
txt_choose_recycler_head)
;
}
}
class HolderItem
extends RecyclerView.ViewHolder
{
private RelativeLayout
relativeLayout;
private AppCompatCheckBox
checkBox;
private ImageView
iv_icon;
private TextView
textView;
public HolderItem(View itemView)
{
super(itemView)
;
relativeLayout = (RelativeLayout) itemView.findViewById(R.id.
rel_choose_child_recycler)
;
checkBox = (AppCompatCheckBox) itemView.findViewById(R.id.
chk_choose_child_recycler)
;
iv_icon = (ImageView) itemView.findViewById(R.id.
iv_icon)
;
textView = (TextView) itemView.findViewById(R.id.
imgv_choose_child_recycler)
;
}
}
}
public interface ItemClickListener {
void itemClick(String parentStr
,Item item)
;
}
public class MainActivity
extends AppCompatActivity
final GridLayoutManager manager =
new GridLayoutManager(
this,4)
;
manager.setSpanSizeLookup(
new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(
int position) {
if (
adapter.
isHeader[position])
{
return manager.getSpanCount()
;
}
else {
return 1;
}}
})
;
mRecyclerView.setLayoutManager(manager)
;
mRecyclerView.setAdapter(
adapter)
;
adapter.setData(groupList
,childList)
;
ItemClickListener
mOnClick =
new ItemClickListener() {
@Override
public void itemClick(String parentStr
, Item item) {
Toast.
makeText(MainActivity.
this,parentStr+
"---"+item.getName()+
"-----"+item.getId()
, Toast.
LENGTH_SHORT).show()
;
}
}
;
}
转载请注明原文地址: https://ju.6miu.com/read-962568.html