RecyclerView.Adapter

    xiaoxiao2021-12-14  19

     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

    最新回复(0)