package com.mcxtzhang.commonadapter.viewgroup; import android.view.View; import android.view.ViewGroup; import com.mcxtzhang.commonadapter.viewgroup.adapter.base.IViewGroupAdapter; import com.mcxtzhang.commonadapter.viewgroup.listener.OnItemClickListener; import com.mcxtzhang.commonadapter.viewgroup.listener.OnItemLongClickListener; /** * 介绍:ViewGroupUtils * 为任意ViewGroup 动态addView的工具类, * 只依赖于 IViewGroupAdapter 接口 * <p> * 作者:zhangxutong * 邮箱:mcxtzhang@163.com * 主页:http://blog.csdn.net/zxt0601 * 时间: 16/12/08. */ public class ViewGroupUtils { /** * 刷新UI * 没有点击事件 * The method is deprecated ,{@link VGUtil} * * @param viewGroup * @param adapter */ @Deprecated public static void refreshUI(ViewGroup viewGroup, IViewGroupAdapter adapter) { addViews(viewGroup, adapter); } /** * 刷新UI ,和点击事件 * The method is deprecated ,{@link VGUtil} * * @param viewGroup * @param adapter * @param onItemClickListener */ @Deprecated public static void refreshUIWithClickListener(ViewGroup viewGroup, IViewGroupAdapter adapter, OnItemClickListener onItemClickListener) { addViews(viewGroup, adapter, onItemClickListener); } /** * 刷新UI ,和长按事件 * The method is deprecated ,{@link VGUtil} * * @param viewGroup * @param adapter * @param onItemClickListener */ @Deprecated public static void refreshUIWithLongClickListener(ViewGroup viewGroup, IViewGroupAdapter adapter , OnItemClickListener onItemClickListener, OnItemLongClickListener onItemLongClickListener) { addViews(viewGroup, adapter, true, onItemClickListener, onItemLongClickListener); } /** * 为任意ViewGroup 添加ItemViews. * 并且会清除掉之前所有add过的View * The method is deprecated ,{@link VGUtil} * * @param viewGroup 必传 * @param adapter 必传,至少提供要add的View和需要add的count */ @Deprecated public static void addViews(final ViewGroup viewGroup, IViewGroupAdapter adapter) { addViews(viewGroup, adapter, true, null, null); } /** * 为任意ViewGroup 添加ItemViews. * 并且会清除掉之前所有add过的View * The method is deprecated ,{@link VGUtil} * * @param viewGroup 必传 * @param adapter 必传,至少提供要add的View和需要add的count * @param onItemClickListener Item点击事件 */ @Deprecated public static void addViews(final ViewGroup viewGroup, IViewGroupAdapter adapter , final OnItemClickListener onItemClickListener) { addViews(viewGroup, adapter, true, onItemClickListener, null); } /** * 为任意ViewGroup 添加ItemViews. * The method is deprecated ,{@link VGUtil} * * @param viewGroup 必传 * @param adapter 必传,至少提供要add的View和需要add的count * @param removeViews 是否需要remove掉之前的Views * @param onItemClickListener Item点击事件 * @param onItemLongClickListener Item长按事件 */ @Deprecated public static void addViews(final ViewGroup viewGroup, IViewGroupAdapter adapter , boolean removeViews , final OnItemClickListener onItemClickListener , final OnItemLongClickListener onItemLongClickListener) { if (viewGroup == null || adapter == null) { return; } //如果需要remove掉之前的Views if (removeViews) { //viewGroup.removeAllViews(); adapter.recycleViews(viewGroup); } //开始添加子Views,通过Adapter获得需要添加的Count int count = adapter.getCount(); for (int i = 0; i < count; i++) { //通过Adapter获得ItemView View itemView = adapter.getView(viewGroup, i); viewGroup.addView(itemView); //添加点击事件,itemView之前没有点击事件才会去设置 if (null != onItemClickListener && !itemView.isClickable()) { final int finalI = i; itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onItemClickListener.onItemClick(viewGroup, view, finalI); } }); } //添加长按事件itemView之前没有长按事件才会去设置 if (null != onItemLongClickListener && !itemView.isLongClickable()) { final int finalI = i; itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { return onItemLongClickListener.onItemLongClick(viewGroup, view, finalI); } }); } } } /** * 为任意ViewGroup设置OnItemClickListener. * 该方法必须在addViews()方法之后调用,否则无效。 * 因为ItemView 必须被添加在ViewGroup里才能遍历到。 * 建议直接在addViews()方法里传入OnItemClickListener进行设置,性能更高 * * @param viewGroup * @param onItemClickListener */ public static void setOnItemClickListener(final ViewGroup viewGroup, final OnItemClickListener onItemClickListener) { if (viewGroup == null || onItemClickListener == null) { return; } int childCount = viewGroup.getChildCount(); for (int i = 0; i < childCount; i++) { final View itemView = viewGroup.getChildAt(i); //itemView之前没有点击事件才会去设置 if (null != itemView && !itemView.isClickable()) { final int finalI = i; itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onItemClickListener.onItemClick(viewGroup, itemView, finalI); } }); } } } /** * 为任意ViewGroup设置OnItemLongClickListener. * 该方法必须在addViews()方法之后调用,否则无效。 * 因为ItemView 必须被添加在ViewGroup里才能遍历到。 * 建议直接在addViews()方法里传入OnItemLongClickListener进行设置,性能更高 * * @param viewGroup * @param onItemLongClickListener */ public static void setOnItemLongClickListener(final ViewGroup viewGroup, final OnItemLongClickListener onItemLongClickListener) { if (viewGroup == null || onItemLongClickListener == null) { return; } int childCount = viewGroup.getChildCount(); for (int i = 0; i < childCount; i++) { final View itemView = viewGroup.getChildAt(i); //itemView之前没有长按事件才会去设置 if (null != itemView && !itemView.isLongClickable()) { final int finalI = i; itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { return onItemLongClickListener.onItemLongClick(viewGroup, itemView, finalI); } }); } } } }