整体需要的文件
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);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
@Override
public 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>
小白一个望各位大神留情,这个是给我自己备份看的