GridView实现checkbox效果(单选效果)

来源:互联网 发布:淘宝网毛呢女装中长款 编辑:程序博客网 时间:2024/05/29 23:22

整体需要的文件


bean中的代码

public class Bean {private String name;private String states;private String id;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getStates() {return states;}public void setStates(String states) {this.states = states;}
DataUtil类
/** * 数据处理类 */public class DataUtil {    /**     * 获取所有库存     *     * @return     */    public static int getAllStock(List<SkuItme> mList) {        int stock = 0;        for (SkuItme itme : mList) {            stock += itme.getSkuStock();        }        return stock;    }    /**     * 获取库存     *     * @param colorStr     * @param sizeStr     * @return     */    public static int getStockByColorAndSize(List<SkuItme> mList, String colorStr, String sizeStr) {        int stock = 0;        for (SkuItme itme : mList) {            String color = itme.getSkuColor();            String size = itme.getSkuSize();            if (color.equals(colorStr) && size.equals(sizeStr)) {                stock = itme.getSkuStock();                break;            }        }        return stock;    }    public static String getImageByColorAndSize(List<SkuItme> mList, String colorStr, String sizeStr) {        String stock = "";        for (SkuItme itme : mList) {            String color = itme.getSkuColor();            String size = itme.getSkuSize();            if (color.equals(colorStr) && size.equals(sizeStr)) {                stock = itme.getSkuIamgeUrl();                break;            }        }        return stock;    }    public static SkuItme getSkuByColorAndSize(List<SkuItme> mList, String colorStr, String sizeStr) {        SkuItme stock = new SkuItme();        for (SkuItme itme : mList) {            String color = itme.getSkuColor();            String size = itme.getSkuSize();            if (color.equals(colorStr) && size.equals(sizeStr)) {                stock = itme;                break;            }        }        return stock;    }    /**     * 清空状态     */    public static List<Bean> clearAdapterStates(List<Bean> mList) {        int size = mList.size();        for (int i = 0; i < size; i++) {            Bean bean = mList.get(i);            bean.setStates("1");            mList.set(i, bean);        }        return mList;    }    /**     * 设置选中状态     *     * @param mList     * @param key     */    public static List<Bean> setAdapterStates(List<Bean> mList, String key) {        int size = mList.size();        for (int i = 0; i < size; i++) {            Bean bean = mList.get(i);            String str = bean.getName();            if (str.equals(key)) {                bean.setStates("0");            } else {                bean.setStates("1");            }            mList.set(i, bean);        }        return mList;    }    /**     * 获取该颜色的所有库存     *     * @param mList     * @param str     * @return     */    public static int getColorAllStock(List<SkuItme> mList, String str) {        int stock = 0;        for (SkuItme itme : mList) {            String color = itme.getSkuColor();            if (color.equals(str)) {                stock += itme.getSkuStock();                break;            }        }        return stock;    }    /**     * 获取该尺码的所有库存     *     * @param mList     * @param sizeStr     * @return     */    public static int getSizeAllStock(List<SkuItme> mList, String sizeStr) {        int stock = 0;        for (SkuItme itme : mList) {            String size = itme.getSkuSize();            if (size.equals(sizeStr)) {                stock += itme.getSkuStock();            }        }        return stock;    }    /**     * 更新适配器状态     *     * @param states     */    public static List<Bean> updateAdapterStates(List<Bean> mList, String states, int postion) {        int size = mList.size();        for (int i = 0; i < size; i++) {            Bean bean = mList.get(i);            //根据传过的位置给当前的设置当前item的背景色            if (i == postion) {                bean.setStates(states);            } else {                //如果不是点击当前的item,那么没有被点击的item设置为1就是设置没有被选中并把颜色改变                if (!bean.getStates().equals("2")) {                    bean.setStates("1");                }            }            mList.set(i, bean);        }        return mList;    }    /**     * 点击颜色后,获取该颜色对应的所有尺码列表     *     * @param colorStr     */    public static List<String> getSizeListByColor(List<SkuItme> mList, String colorStr) {        List<String> list = null;        if (!TextUtils.isEmpty(colorStr)) {            list = new ArrayList<String>();            for (SkuItme itme : mList) {                String color = itme.getSkuColor();                String size = itme.getSkuSize();                if (color.equals(colorStr)) {                    list.add(size);                }            }        }        return list;    }    /**     * 点击尺码后,获取该尺码对应的所有颜色列表     *     * @param mList     * @param sizeStr     */    public static List<String> getColorListBySize(List<SkuItme> mList, String sizeStr) {        List<String> list = null;        list = new ArrayList<String>();        for (SkuItme itme : mList) {            String color = itme.getSkuColor();            String size = itme.getSkuSize();            if (size.equals(sizeStr)) {                list.add(color);            }        }        return list;    }    /**     * @param mList 尺码列表/颜色列表     * @param list  该颜色对应的尺码列表/颜色列表     * @param key   之前选中的尺码/颜色     * @return     */    public static List<Bean> setSizeOrColorListStates(List<Bean> mList, List<String> list, String key) {        int size = mList.size();        List<Bean> list2 = new ArrayList<Bean>();        for (int i = 0; i < size; i++) {            Bean bean = mList.get(i);            String name = bean.getName();            for (String str : list) {                if (name.equals(str)) {                    bean.setStates("1");                    if (key.equals(str)) {                        bean.setStates("0");                    }                    break;                } else {                    bean.setStates("2");                }            }            list2.add(bean);        }        return list2;    }    public static List<Bean> clearStatus(List<Bean> mList) {        int size = mList.size();        List<Bean> list2 = new ArrayList<Bean>();        for (int i = 0; i < size; i++) {            Bean bean = mList.get(i);            bean.setStates("2");            list2.add(bean);        }        return list2;    }

myGridView类

** * 滑动冲突 */public class MyGridView extends GridView {public MyGridView(Context context) {super(context);}public MyGridView(Context context, AttributeSet attrs) {super(context, attrs);}public MyGridView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overridepublic void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (ev.getAction() == MotionEvent.ACTION_MOVE) {return true;}return super.dispatchTouchEvent(ev);}}

SKuadapter类

** * sku选择 */public class SkuAdapter extends BaseAdapter {    private List<Bean> list;//数据源    private LayoutInflater mInflater;// 得到一个LayoutInfalter对象用来导入布局    public onItemClickListener itemClickListener;// 接口回调    public void setItemClickListener(onItemClickListener itemClickListener) {        this.itemClickListener = itemClickListener;    }    public SkuAdapter(List<Bean> list, Context context) {        super();        this.mInflater = LayoutInflater.from(context);        this.list = list;    }    public void setList(List<Bean> list) {        this.list = list;    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return list.size();    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return list.get(position);    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return position;    }    @Override    public View getView(final int position, View convertView, ViewGroup parent) {        // TODO Auto-generated method stub        ViewHolder holder;        if (convertView == null) {            holder = new ViewHolder();            convertView = mInflater.inflate(R.layout.gridview_item, null);            /** 得到各个控件的对象 */            holder.title = (TextView) convertView.findViewById(R.id.ItemText);            holder.layout = (LinearLayout) convertView.findViewById(R.id.layout);            convertView.setTag(holder);// 绑定ViewHolder对象        } else {            holder = (ViewHolder) convertView.getTag();// 取出ViewHolder对象        }        final Bean bean = list.get(position);        switch (bean.getStates()) {            // 选中            case "0":                holder.layout.setBackgroundResource(R.drawable.shape_sku_press);                holder.title.setTextColor(ContextCompat.getColor(convertView.getContext(),R.color.green));                break;            // 未选中            case "1":                holder.layout.setBackgroundResource(R.drawable.shape_sku_nopress);                holder.title.setTextColor(ContextCompat.getColor(convertView.getContext(),R.color.actionsheet_gray));                break;            // 不可选            case "2":                holder.layout.setBackgroundResource(R.drawable.shape_sku_empty);                holder.title.setTextColor(ContextCompat.getColor(convertView.getContext(),R.color.white));                break;            default:                break;        }        /** 设置TextView显示的内容,即我们存放在动态数组中的数据 */        holder.title.setText(bean.getName());        holder.layout.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                if (itemClickListener != null) {                    if (!bean.getStates().equals("2")) {                        itemClickListener.onItemClick(bean, position);                    }                }            }        });        return convertView;    }    public final class ViewHolder {        public TextView title;        public LinearLayout layout;    }    public interface onItemClickListener {        public void onItemClick(Bean bean, int position);    }}
SkuItme类这个类没有用到

public class SkuItme {    private String id;    private String skuSize;    private String skuColor;    private int skuStock;    private String skuIamgeUrl;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getSkuSize() {        return skuSize;    }    public void setSkuSize(String skuSize) {        this.skuSize = skuSize;    }    public String getSkuColor() {        return skuColor;    }    public void setSkuColor(String skuColor) {        this.skuColor = skuColor;    }    public int getSkuStock() {        return skuStock;    }    public void setSkuStock(int skuStock) {        this.skuStock = skuStock;    }    public String getSkuIamgeUrl() {        return skuIamgeUrl;    }    public void setSkuIamgeUrl(String skuIamgeUrl) {        this.skuIamgeUrl = skuIamgeUrl;    }}

MainActivity

public class MainActivity extends AppCompatActivity {    private List<Bean> mSizeList;    private String size;    private SkuAdapter skuSizeAdapter;    private MyGridView gvSise;    private String id="";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        gvSise= (MyGridView) findViewById(R.id.gv_size);        initData();        skuSizeAdapter = new SkuAdapter(mSizeList, this);        gvSise.setAdapter(skuSizeAdapter);        skuSizeAdapter.setItemClickListener(new SkuAdapter.onItemClickListener() {            @Override            public void onItemClick(Bean bean, int position) {                switch (bean.getStates()) {                    case "0":                        //选中的时候就把所有的状态设置为未选中,为下一个item点击事件做准备,如果不这么做的话就不能实现单选效果,而且效果就会变成多选效果。像是checkbox多个一样的效果                        mSizeList = DataUtil.clearAdapterStates(mSizeList);                        skuSizeAdapter.setList(mSizeList);                        skuSizeAdapter.notifyDataSetChanged();                        id=null;                        break;                    case  "1":                        //实现点击当前view把背景色改变                        mSizeList = DataUtil.updateAdapterStates(mSizeList, "0", position);                        skuSizeAdapter.setList(mSizeList);                        skuSizeAdapter.notifyDataSetChanged();                        id=mSizeList.get(position).getId();                        break;                }            }        });    }    private void initData() {        mSizeList = new ArrayList<Bean>();        List<String> sizeList = new ArrayList<>();        sizeList.add("S");        sizeList.add("M");        sizeList.add("L");        sizeList.add("XXL");        sizeList.add("XXXL");        sizeList.add("LLX");        sizeList.add("XL");        int size = sizeList.size();        for (int i = 0; i < size; i++) {            Bean bean = new Bean();            bean.setName(sizeList.get(i));            bean.setStates("1");            bean.setId(i+"ID");            mSizeList.add(bean);        }    }}

activity_main.xml

<LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.msi.shixiandanxuan.MainActivity">    <com.example.msi.shixiandanxuan.select.MyGridView        android:id="@+id/gv_size"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="20dp"        android:cacheColorHint="#00000000"        android:horizontalSpacing="10dp"        android:listSelector="#00000000"        android:numColumns="4"        android:padding="5dp"        android:scrollbars="none"        android:verticalSpacing="10dp"        /></LinearLayout>

gridview_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center"    android:padding="0dp">    <LinearLayout        android:id="@+id/layout"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="@drawable/shape_sku_press"        android:gravity="center">        <TextView            android:id="@+id/ItemText"            android:padding="10dp"            android:layout_marginTop="2dp"            android:layout_marginLeft="2dp"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="TextView01"            android:textSize="15sp"/>    </LinearLayout></LinearLayout>

小白一个望各位大神留情,这个是给我自己备份看的


阅读全文
0 0
原创粉丝点击