之前传了github,忘了更新,给大家带来的不便请谅解!
https://github.com/SimbaLiu/filter.github.io


京东筛选更新了,很好,很炫酷。那什么,我们也不差是吧,于是就有了这个demo。话不多说,先看图,不想看代码的朋友,直接点底部下demo。

图1里面呢,就两点,弹出的PopupWindow的高度为屏幕高的一半,另一半为半透明高端黑,简单点就用weight属性来写,方便快捷。然后在上半部分写个GridView,在GridView的底部有个LinearLayout,用来放俩Button,但是Button比较难处理布局,本着高仿的原则,我还是用的TextView。哈哈,机智如我。

先来看看这个PopupWindow的布局吧:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#33000000"android:orientation="vertical"><LinearLayout
        android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:background="#ffffff"android:orientation="vertical"><GridView
            android:id="@+id/grid"android:layout_width="match_parent"android:layout_height="0dp"android:layout_marginTop="14dp"android:layout_weight="1"android:horizontalSpacing="14dp"android:numColumns="3"android:verticalSpacing="14dp" /><LinearLayout
            android:layout_width="match_parent"android:layout_height="48dp"android:orientation="vertical"><View
                android:layout_width="match_parent"android:layout_height="1px"android:background="#cccccc" /><LinearLayout
                android:layout_width="match_parent"android:layout_height="48dp"><TextView
                    android:id="@+id/reset"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="重置" /><TextView
                    android:id="@+id/ok"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:background="#ff0033"android:gravity="center"android:text="确定"android:textColor="#ffffff" /></LinearLayout></LinearLayout></LinearLayout><View
        android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" />
</LinearLayout>

布局简单吧,反正我是没怎么费脑筋就给搞出来的。下面来看看PopupWindow的代码:

package lx.com.filter.view;import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;import java.util.List;import lx.com.filter.R;
import lx.com.filter.adapter.PopupAdapter;
import lx.com.filter.vo.Vo;public class PricePopup extends PopupWindow {private View contentView;private GridView grid;private TextView reset;private TextView ok;private PopupAdapter adapter;private List<Vo> data;public PricePopup(final Activity context, final List<Vo> data) {this.data = data;adapter = new PopupAdapter(context);LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);contentView = inflater.inflate(R.layout.popup, null);grid = (GridView) contentView.findViewById(R.id.grid);reset = (TextView) contentView.findViewById(R.id.reset);ok = (TextView) contentView.findViewById(R.id.ok);grid.setAdapter(adapter);grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {data.get(position).setChecked(!data.get(position).isChecked());for (int i = 0; i < data.size(); i++) {if (i == position) {continue;}data.get(i).setChecked(false);}Toast.makeText(context, data.get(position).getStr2(), Toast.LENGTH_SHORT).show();adapter.notifyDataSetChanged(data);}});int h = context.getWindowManager().getDefaultDisplay().getHeight();int w = context.getWindowManager().getDefaultDisplay().getWidth();this.setContentView(contentView);this.setWidth(w);this.setHeight(h);ColorDrawable dw = new ColorDrawable(00000000);this.setBackgroundDrawable(dw);this.setFocusable(true);this.setOutsideTouchable(false);this.update();}public void showPricePopup(View parent, final List<Vo> data) {if (!this.isShowing()) {this.showAsDropDown(parent);adapter.notifyDataSetChanged(data);} else {this.dismiss();}}}

Adapter就不放了,demo里面有的。接下来,图2里面的就比较复杂了。还是先看布局吧:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/ll_popup"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><View
        android:id="@+id/popup_goods_noview"android:layout_width="48dp"android:layout_height="match_parent"android:background="#88000000" /><RelativeLayout
        android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"><LinearLayout
            android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@+id/filter_layout"android:orientation="vertical"android:padding="14dp"><TextView
                android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="服务" /><GridView
                android:id="@+id/yuguo_service"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="14dp"android:horizontalSpacing="14dp"android:numColumns="3"android:verticalSpacing="14dp"></GridView><TextView
                android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="14dp"android:text="价格区间" /><LinearLayout
                android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="14dp"android:layout_marginTop="14dp"android:orientation="horizontal"><EditText
                    android:layout_width="0dp"android:layout_height="36dp"android:layout_weight="1"android:background="@drawable/edittext_shape"android:digits="0123456789"android:gravity="center"android:hint="最低价"android:inputType="number" /><TextView
                    android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="---" /><EditText
                    android:layout_width="0dp"android:layout_height="36dp"android:layout_weight="1"android:background="@drawable/edittext_shape"android:digits="0123456789"android:gravity="center"android:hint="最高价"android:inputType="number" /></LinearLayout><RelativeLayout
                android:layout_width="match_parent"android:layout_height="match_parent"><ListView
                    android:id="@+id/selection_list"android:layout_width="match_parent"android:layout_height="wrap_content"android:divider="@null"android:dividerHeight="14dp"android:orientation="vertical"android:scrollbars="none" /></RelativeLayout></LinearLayout><LinearLayout
            android:id="@+id/filter_layout"android:layout_width="match_parent"android:layout_height="48dp"android:layout_alignParentBottom="true"android:background="#ffffff"android:orientation="vertical"><View
                android:layout_width="match_parent"android:layout_height="1px"android:background="#cccccc" /><LinearLayout
                android:layout_width="match_parent"android:layout_height="48dp"android:gravity="center_vertical"android:orientation="horizontal"><TextView
                    android:id="@+id/filter_reset"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="重置" /><TextView
                    android:id="@+id/filter_sure"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:background="#ff0033"android:gravity="center"android:text="确定"android:textColor="#ffffff" /></LinearLayout></LinearLayout></RelativeLayout>
</LinearLayout>

PopupWindow代码:

package lx.com.filter.view;import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.util.ArrayList;
import java.util.List;import lx.com.filter.R;
import lx.com.filter.adapter.GoodsAttrListAdapter;
import lx.com.filter.adapter.GoodsAttrsAdapter;
import lx.com.filter.vo.SaleAttributeNameVo;
import lx.com.filter.vo.SaleAttributeVo;/*** 筛选商品属性选择的popupwindow*/
public class FilterPopupWindow extends PopupWindow {private View contentView;private Context context;private View goodsNoView;private GridView serviceGrid;private ListView selectionList;private TextView filterReset;private TextView filterSure;private GoodsAttrListAdapter adapter;private GoodsAttrsAdapter serviceAdapter;private List<SaleAttributeNameVo> itemData;private List<SaleAttributeVo> serviceList;private String[] serviceStr = new String[]{"仅看有货", "促销", "手机专享"};/*** 商品属性选择的popupwindow*/public FilterPopupWindow(final Activity context) {this.context = context;LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);contentView = inflater.inflate(R.layout.popup_goods_details, null);goodsNoView = contentView.findViewById(R.id.popup_goods_noview);serviceGrid = (GridView) contentView.findViewById(R.id.yuguo_service);selectionList = (ListView) contentView.findViewById(R.id.selection_list);filterReset = (TextView) contentView.findViewById(R.id.filter_reset);filterSure = (TextView) contentView.findViewById(R.id.filter_sure);goodsNoView.setOnClickListener(new CancelOnClickListener());contentView.setOnKeyListener(new OnKeyListener() {@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK) {dismiss();}return true;}});serviceList = new ArrayList<SaleAttributeVo>();for (int i = 0; i < serviceStr.length; i++) {SaleAttributeVo vo = new SaleAttributeVo();vo.setValue(serviceStr[i]);serviceList.add(vo);}serviceAdapter = new GoodsAttrsAdapter(context);serviceGrid.setAdapter(serviceAdapter);serviceAdapter.notifyDataSetChanged(true, serviceList);serviceGrid.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {//设置当前选中的位置的状态为非。serviceList.get(arg2).setChecked(!serviceList.get(arg2).isChecked());for (int i = 0; i < serviceList.size(); i++) {//跳过已设置的选中的位置的状态if (i == arg2) {continue;}serviceList.get(i).setChecked(false);}serviceAdapter.notifyDataSetChanged(true, serviceList);}});itemData = new ArrayList<SaleAttributeNameVo>();adapter = new GoodsAttrListAdapter(context, itemData);selectionList.setAdapter(adapter);String str = "["+ "{\"nameId\":\"V2QASD\",\"saleVo\":["+ "{\"value\":\"2核\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"1\"},"+ "{\"value\":\"4核\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"6核\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"8核\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"}"+ "],\"name\":\"CPU\"},"+ "{\"nameId\":\"V2QASD\",\"saleVo\":["+ "{\"value\":\"全网通\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"移动4G\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"1\"},"+ "{\"value\":\"电信4G\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"联通4G\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"}"+ "],\"name\":\"网络制式\"},"+ "{\"nameId\":\"V2QASD\",\"saleVo\":["+ "{\"value\":\"OPPO\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"荣耀\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"苹果\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"1\"},"+ "{\"value\":\"鸭梨\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"月饼\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"vivo\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"}"+ "],\"name\":\"品牌\"},"+ "{\"nameId\":\"V2QASD\",\"saleVo\":["+ "{\"value\":\"音乐\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"1\"},"+ "{\"value\":\"拍照\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"待机长\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"}"+ "],\"name\":\"主打\"},"+ "{\"nameId\":\"V2QLAH\",\"saleVo\":["+ "{\"value\":\"4.5英寸\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"5英寸\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"5.5英寸\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"0\"},"+ "{\"value\":\"6英寸\",\"goods\":null,\"goodsAndValId\":\"C6VOWQ\",\"checkStatus\":\"1\"}"+ "],\"name\":\"尺寸\"}" + "]";JSONArray json = null;try {json = new JSONArray(str);refreshAttrs(json);} catch (JSONException e) {e.printStackTrace();}// 重置的点击监听,将所有选项全设为falsefilterReset.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {for (int i = 0; i < itemData.size(); i++) {for (int j = 0; j < itemData.get(i).getSaleVo().size(); j++) {itemData.get(i).getSaleVo().get(j).setChecked(false);}}adapter.notifyDataSetChanged();}});// 确定的点击监听,将所有已选中项列出filterSure.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String str = "";for (int i = 0; i < itemData.size(); i++) {for (int j = 0; j < itemData.get(i).getSaleVo().size(); j++) {if (itemData.get(i).getSaleVo().get(j).isChecked()) {str = str + itemData.get(i).getSaleVo().get(j).getValue();}}}Toast.makeText(FilterPopupWindow.this.context, str, Toast.LENGTH_SHORT).show();}});this.setContentView(contentView);this.setWidth(LayoutParams.MATCH_PARENT);this.setHeight(LayoutParams.MATCH_PARENT);ColorDrawable dw = new ColorDrawable(00000000);this.setBackgroundDrawable(dw);this.setFocusable(true);this.setOutsideTouchable(false);this.update();}/*** 刷新商品属性** @param json* @throws JSONException*/public void refreshAttrs(JSONArray json) throws JSONException {itemData.clear();for (int i = 0; i < json.length(); i++) {SaleAttributeNameVo saleName = new SaleAttributeNameVo();JSONObject obj = (JSONObject) json.opt(i);saleName.setName(obj.getString("name"));List<SaleAttributeVo> list = new ArrayList<SaleAttributeVo>();net.sf.json.JSONArray array = new net.sf.json.JSONArray();array = net.sf.json.JSONArray.fromObject(obj.getString("saleVo"));for (int j = 0; j < array.size(); j++) {net.sf.json.JSONObject object = array.getJSONObject(j);SaleAttributeVo vo = new SaleAttributeVo();vo.setGoods(object.getString("goods"));vo.setValue(object.getString("value"));vo.setGoodsAndValId(object.getString("goodsAndValId"));if ("1".equals(object.getString("checkStatus"))) {vo.setChecked(true);} else {vo.setChecked(false);}list.add(vo);}saleName.setSaleVo(list);// 是否展开saleName.setNameIsChecked(false);itemData.add(saleName);}adapter.notifyDataSetChanged();}public class CancelOnClickListener implements OnClickListener {@Overridepublic void onClick(View v) {dismiss();}}public boolean onKeyDown(Context context, int keyCode, KeyEvent event) {this.context = context;if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK) {dismiss();}return true;}public void showFilterPopup(View parent) {if (!this.isShowing()) {this.showAsDropDown(parent);} else {this.dismiss();}}}

额,好像代码有点长,没办法,东西有这么多的。看Adapter吧:
这个是单选的:

package lx.com.filter.adapter;import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;import java.util.List;import lx.com.filter.R;
import lx.com.filter.vo.SaleAttributeNameVo;/*** 属性listview的适配器*/
public class GoodsAttrListAdapter extends BaseAdapter {private Context context;private List<SaleAttributeNameVo> data;public GoodsAttrListAdapter(Context context, List<SaleAttributeNameVo> data) {this.context = context;this.data = data;}public int getCount() {return data == null ? 0 : data.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(final int position, View v, ViewGroup parent) {final MyView myView;if (v == null) {myView = new MyView();v = View.inflate(context, R.layout.item_goods_attr_list, null);myView.name = (TextView) v.findViewById(R.id.attr_list_name);myView.img = (ImageView) v.findViewById(R.id.attr_list_img);myView.grid = (GridView) v.findViewById(R.id.attr_list_grid);myView.grid.setSelector(new ColorDrawable(Color.TRANSPARENT));v.setTag(myView);} else {myView = (MyView) v.getTag();}myView.name.setText(data.get(position).getName());final GoodsAttrsAdapter adapter = new GoodsAttrsAdapter(context);myView.grid.setAdapter(adapter);adapter.notifyDataSetChanged(data.get(position).isNameIsChecked(), data.get(position).getSaleVo());myView.img.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (data.get(position).isNameIsChecked()) {((ImageView) v).setImageResource(R.drawable.sort_common_up);} else {((ImageView) v).setImageResource(R.drawable.sort_common_down);}adapter.notifyDataSetChanged(data.get(position).isNameIsChecked(), data.get(position).getSaleVo());data.get(position).setNameIsChecked(!data.get(position).isNameIsChecked());}});myView.grid.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {//设置当前选中的位置的状态为非。data.get(position).getSaleVo().get(arg2).setChecked(!data.get(position).getSaleVo().get(arg2).isChecked());for (int i = 0; i < data.get(position).getSaleVo().size(); i++) {//跳过已设置的选中的位置的状态if (i == arg2) {continue;}data.get(position).getSaleVo().get(i).setChecked(false);}if (!data.get(position).isNameIsChecked()) {myView.img.setImageResource(R.drawable.sort_common_up);} else {myView.img.setImageResource(R.drawable.sort_common_down);}adapter.notifyDataSetChanged(!data.get(position).isNameIsChecked(), data.get(position).getSaleVo());}});return v;}static class MyView {public TextView name;public ImageView img;public GridView grid;}}

这个是多选,只是myView.grid.setOnItemClickListener()里面的方法不一样,单选的是把其他的选中状态设置成false了,没往代码里面传了哈,需要的朋友在这里看。

package com.hf.yuguo.sort.adapter;import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;import com.hf.yuguo.R;
import com.hf.yuguo.model.SaleAttributeNameVo;import java.util.List;/*** 属性listview的适配器*/
public class FilterAttrListAdapter extends BaseAdapter {private Context context;private List<SaleAttributeNameVo> data;public FilterAttrListAdapter(Context context, List<SaleAttributeNameVo> data) {this.context = context;this.data = data;}public int getCount() {return data == null ? 0 : data.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(final int position, View v, ViewGroup parent) {final MyView myView;if (v == null) {myView = new MyView();v = View.inflate(context, R.layout.item_filter_attr_list, null);myView.name = (TextView) v.findViewById(R.id.attr_list_name);myView.layout = (LinearLayout) v.findViewById(R.id.attr_list_all);myView.img = (ImageView) v.findViewById(R.id.attr_list_img);myView.grid = (GridView) v.findViewById(R.id.attr_list_grid);myView.grid.setSelector(new ColorDrawable(Color.TRANSPARENT));v.setTag(myView);} else {myView = (MyView) v.getTag();}myView.name.setText(data.get(position).getName());final FilterAttrsAdapter adapter = new FilterAttrsAdapter(context);myView.grid.setAdapter(adapter);adapter.notifyDataSetChanged(data.get(position).isNameIsChecked(), data.get(position).getSaleVo());myView.layout.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (data.get(position).isNameIsChecked()) {myView.img.setImageResource(R.drawable.sort_common_down);} else {myView.img.setImageResource(R.drawable.sort_common_up);}data.get(position).setNameIsChecked(!data.get(position).isNameIsChecked());adapter.notifyDataSetChanged(data.get(position).isNameIsChecked(),data.get(position).getSaleVo());}});myView.grid.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {//设置当前选中的位置的状态为非。data.get(position).getSaleVo().get(arg2).setChecked(!data.get(position).getSaleVo().get(arg2).isChecked());adapter.notifyDataSetChanged(data.get(position).isNameIsChecked(), data.get(position).getSaleVo());}});return v;}static class MyView {public TextView name;public LinearLayout layout;public ImageView img;public GridView grid;}}

我把监听写这里面的。内部Adapter如下:

package lx.com.filter.adapter;import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;import lx.com.filter.R;
import lx.com.filter.vo.SaleAttributeVo;/*** 子属性GridView的适配器*/
public class GoodsAttrsAdapter extends BaseAdapter {private Context context;private List<SaleAttributeVo> data = new ArrayList<SaleAttributeVo>();public GoodsAttrsAdapter(Context context) {this.context = context;}@Overridepublic int getCount() {return data == null ? 0 : data.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(final int position, View v, ViewGroup parent) {final MyView myView;if (v == null) {myView = new MyView();v = View.inflate(context, R.layout.item_goods_attrs, null);myView.attr = (TextView) v.findViewById(R.id.attr_name);v.setTag(myView);} else {myView = (MyView) v.getTag();}myView.attr.setText(data.get(position).getValue());/*** 根据选中状态来设置item的背景和字体颜色*/if (data.get(position).isChecked()) {myView.attr.setBackgroundResource(R.drawable.goods_attr_selected_shape);myView.attr.setTextColor(Color.WHITE);} else {myView.attr.setBackgroundResource(R.drawable.goods_attr_unselected_shape);myView.attr.setTextColor(Color.GRAY);}return v;}static class MyView {public TextView attr;}@Overridepublic void notifyDataSetChanged() {super.notifyDataSetChanged();}public void notifyDataSetChanged(boolean isUnfold,final List<SaleAttributeVo> tempData) {if (tempData == null || 0 == tempData.size()) {return;}data.clear();// 如果是展开的,则加入全部data,反之则只显示3条if (isUnfold) {data.addAll(tempData);} else {data.add(tempData.get(0));data.add(tempData.get(1));data.add(tempData.get(2));}notifyDataSetChanged();}}

其中的isNameIsChecked()其实是因为懒,没有改名字,这个是判断是否需要子属性展开的。

好了,就酱。demo放出:
http://download.csdn.net/detail/u013806766/9579156


突然还想起个问题,之前用Android Studio没有配好Gradle,于是就用的Eclipse先写的,导出的时候选的Gradle,再用Android Studio编辑的,结果报错了,大概意思就是Gradle版本的问题,于是乎:

gradle编译时失败报错,需将 项目名称\gradle\wrapper\gradle-wrapper.properties里的distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip改为distributionUrl=http\://services.gradle.org/distributions/gradle-2.10-all.zip后面的数字即开发环境配置中gradle的版本

Android 仿2016版京东筛选相关推荐

  1. HTML5期末大作业:京东网站设计——仿2016版京东首页(1页) HTML+CSS+JavaScript 大学生网页作品 电商网页设计作业模板 学生网页制作源代码下载

    HTML5期末大作业:京东网站设计--仿2016版京东首页(1页) HTML+CSS+JavaScript 大学生网页作品 电商网页设计作业模板 学生网页制作源代码下载 常见网页设计作业题材有 个人. ...

  2. 网页设计作业`京东网站设计——仿2016版京东首页(1页) HTML+CSS+JavaScript 大学生网页作品 电商网页设计作业模板 学生网页制作源代码下载

    HTML5期末大作业:京东网站设计--仿京东首页(1页) HTML+CSS+JavaScript 大学生网页作品 电商网页设计作业模板 学生网页制作源代码下载 文章目录 HTML5期末大作业:京东网站 ...

  3. Android仿淘宝京东商品规格参数颜色筛选

    Android 选择商品属性sku 最近项目中使用SKU属性查询,类似淘宝京东商品的选择,在网上查询了弄了几个源码看看,发现还是实现不了多属性选择问题,再原基础上改动相当费事,所以想干脆自己处理这个问 ...

  4. Android 仿淘宝京东商品详情页阻力翻页效果

    原文链接:http://code.taobao.org/p/android-example/diff/46/trunk/%E5%95%86%E5%9F%8E%E8%AF%A6%E6%83%85/src ...

  5. android仿饿了么筛选,Android仿饿了么搜索功能

    仿饿了么搜索框 这里采用的是pupupWindow来实现,一个全屏的popupWindow里面放各个View做对应操作 首先是activity_popup.xml布局,很简单,就一个带背景的TextV ...

  6. android 专业密码键盘,Android仿支付宝、京东的密码键盘和输入框

    首先看下效果图 一:布局代码 键盘由0~9的数字,删除键和完成键组成,也可以根据需求通过GridView适配器的getItemViewType方法来定义.点击键的时候背景有变色的效果. 密码输入框由六 ...

  7. android如何实现筛选功能,Android——仿优酷节目筛选功能实现

    来来来,先看下效果图~ 这里有同学可能就已经想到了,这个不就是折叠式的toolbar实现的吗?对啊,我确实是这么做的,还是挺简单的,今天就给大家分享下code了,不过中间也遇到了些小插曲,比如:Too ...

  8. Android 仿淘宝京东等我的订单界面及任意列表拓展

    概述 目前像淘宝及展示列表等都有多个item展示的需求,可能大多数如果没做过,第一眼就是ListView去嵌套ListView,虽然这样是可以完成,但是这样做会导致手机过度绘制,为什么呢?因为当一个I ...

  9. Android 仿淘宝京东商品详情视频+图片与图片第一帧获取

    近日项目有个新需求就是把原本的商品详情只有图片展示,改为视频+图片方式展示. 此博客只提供记录,与思路具体根据自己需求实现.首先想到的是Google搜索下别人的实现方式来参考实现发现不怎么适合项目需求 ...

最新文章

  1. python入门要多久-初学者如何快速上手python入门要多久
  2. leetcode算法题--两个字符串的最小ASCII删除和★
  3. 织梦需要php什么版本,DedeCmsV5.1FreeSP1正式版发布
  4. 电影推荐_亲和性分析_规则提取(数据挖掘入门与实践-实验6)
  5. 上元节的灯会(亮)-dfs
  6. hive hql文档_Hive存储过程HQL/SQL(一)–hplsql命令行
  7. SNIFE 和 std::enable_if
  8. 受新冠病毒影响,谷歌延迟发布 Chrome 和 Chrome OS 安全更新版本
  9. Hystrix入门与分析(一):初识Hystrix
  10. web漏洞扫描器原理_基于指纹识别的漏洞扫描设计
  11. 《星科快报》第二期:元宇宙之道.
  12. 基于selenium的大麦网自动抢票脚本实测(新年第一篇)
  13. 信奥赛1990:【19CSPS提高组】划分 解题报告(附ac主代码)
  14. chrome真机调试ios
  15. 数据库查询-分数排名
  16. 孪生素数对php编写,孪生素数
  17. 使用代理爬去微信公众号_Python3网络爬虫开发实战之使用代理爬取微信公众号文章...
  18. 区块链核心概念(1)
  19. vue实现头部吸顶描点
  20. uni-app 实现瀑布流 最简洁方案

热门文章

  1. 徕卡相机为什么卖得贵?对比佳能、尼康有什么不同
  2. c c++ 画点 画线
  3. 电脑桌面没有wifi图标了导致连接不上网络,解决方法
  4. android usb type-c
  5. 用例图、活动图、时序图、类图的详细介绍
  6. 微信小程序 js创建Object对象
  7. 关于使用媒体查询@meda失效原因的总结或注意事项
  8. 浏览器快速打开一个可编辑的文本输入域
  9. 万能素材库_2016万能高考作文素材大全
  10. 谈谈算法的时间复杂度