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
- GridView实现checkbox效果(单选效果)
- GridView实现单选效果
- checkbox实现单选按钮效果
- input:checkbox多选框实现单选效果
- checkbox 实现单选效果(html)
- 用CheckBox实现ListView单选效果
- ListView+CheckBox实现单选效果
- checkbox多选框实现单选效果
- RecyclerView之CheckBox实现单选效果
- 使用checkbox实现单选效果 (模拟radio)
- ListView和GridView实现单选效果
- ListView和GridView实现单选效果
- listview或者gridview 实现单选效果
- GridView或者Listview实现单选效果
- ListView + CheckBox实现单选、多选效果
- 笔记,GridView点击添加背景,类似checkbox效果的实现
- GridView CheckBox单选
- chckbox 实现单选效果(html)
- 深入理解Spring Redis的使用 (九)、通过Redis 实现 分布式锁 的 BUG,以及和数据库加锁的性能测试
- RaspberryPi系统镜像安装与WiFi连接
- http://blog.csdn.net/sdustliyang/article/details/6707303
- Redis Sentinel基本介绍(翻译以及总结)
- JAVA_基础之面向对象的概念
- GridView实现checkbox效果(单选效果)
- C语言函数的参数能允许几个
- Miktex 添加宏包
- pandas replace函数使用小结
- 《UNIX网络编程 卷1》 笔记: I/O复用 select函数
- TabLayout踩坑之IllegalArgumentException: Tab belongs to a different TabLayout.
- IMWeb提升营Day1 | 训练题6: 旋转数组的最小数字
- Access restriction: The type JPEGImageEncoder is not accessible due to restriction
- [LeetCode]AddTwoNumbers