package com.json.car;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class GoodsExpandableListAdapter extends BaseExpandableListAdapter{
private Context context;
private List<GoodsBean> lists;
private LayoutInflater inflater;
private CustomDialog dialog;
private OnSelectedAllListner listener;//回调接口
private boolean isSelectedAll = false;
public GoodsExpandableListAdapter(Context context) {
this.context = context;
inflater = LayoutInflater.from(context);
}
public void refreshDatas(List<GoodsBean> lists){
this.lists = lists;
notifyDataSetChanged();
}
@Override
public int getGroupCount() {
return null != lists ? lists.size() : 0;
}
@Override
public int getChildrenCount(int groupPosition) {
return null != lists ? lists.get(groupPosition).getGoods().size() : 0;
}
@Override
public Object getGroup(int groupPosition) {
return lists.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return lists.get(groupPosition).getGoods().get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
final GroupViewHolder holder;
if(convertView == null){
convertView = inflater.inflate(R.layout.item_group_listview, parent, false);
holder = new GroupViewHolder();
holder.tvShopName = (TextView) convertView.findViewById(R.id.tv_shopName);
holder.ivGroupCheck = (ImageView) convertView.findViewById(R.id.iv_check_group);
convertView.setTag(holder);
}else{
holder = (GroupViewHolder) convertView.getTag();
}
final GoodsBean bean = lists.get(groupPosition);
holder.tvShopName.setText(bean.getShopName());
selectedItem(bean.isGroupSelected(), holder.ivGroupCheck);
holder.ivGroupCheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isGroupSelected = !bean.isGroupSelected();
bean.setGroupSelected(isGroupSelected);//组的状态
for(int i = 0; i < lists.get(groupPosition).getGoods().size(); i++){
lists.get(groupPosition).getGoods().get(i).setChildSelected(isGroupSelected);//子的状态
}
//判断所有组是不是都选中了,都选中的话,通过接口告诉主界面的全选控件,并让其为选中状态的图片
boolean isAllGroup = isAllGroupSelected(lists);
if(listener != null){
listener.isSelectedAll(isAllGroup);
}
notifyDataSetChanged();
}
});
return convertView;
}
@Override
public View getChildView(final int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final ChildViewHolder holder;
if(convertView == null){
convertView = inflater.inflate(R.layout.item_child_listview, parent, false);
holder = new ChildViewHolder();
holder.ivGoodsUrl = (ImageView) convertView.findViewById(R.id.iv_goods_url);
holder.tvGoodsName = (TextView) convertView.findViewById(R.id.tv_goods_name);
holder.tvGoodsOriPrice = (TextView) convertView.findViewById(R.id.tv_goods_ori_price);
holder.tvGoodsPrice = (TextView) convertView.findViewById(R.id.tv_goods_price);
holder.tvGoodsNum = (TextView) convertView.findViewById(R.id.tv_goods_num);
holder.ivChildCheck = (ImageView) convertView.findViewById(R.id.iv_check_child);
convertView.setTag(holder);
}else{
holder = (ChildViewHolder) convertView.getTag();
}
final GoodsBean.GoodsDetailsBean bean = lists.get(groupPosition).getGoods().get(childPosition);
holder.tvGoodsName.setText(bean.getGoodsName());
holder.tvGoodsOriPrice.setText(bean.getGoodsOriPrice());
holder.tvGoodsPrice.setText(bean.getGoodsPrice());
holder.tvGoodsNum.setText(bean.getGoodsNum());
//这里用本地的测试图片,正式开发则需要从网络取
holder.ivGoodsUrl.setImageResource(bean.getGoodsUrl());
selectedItem(bean.isChildSelected(), holder.ivChildCheck);
holder.ivChildCheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChildSelected = !bean.isChildSelected();
bean.setChildSelected(isChildSelected);//子项的选中与未选中
//还需要进一步处理子项状态导致的组的状态问题,如果某一组的子项都选中的话,那么所在的组也为选中状态
boolean isSelectedGroup = isAllChildSelected(lists.get(groupPosition).getGoods());
lists.get(groupPosition).setGroupSelected(isSelectedGroup);
//因为子项状态会影响组的状态,判断所有组是不是都选中了,都选中的话,通过接口告诉主界面的全选控件,并让其为选中状态的图片
boolean isAllGroup = isAllGroupSelected(lists);
if(listener != null){
listener.isSelectedAll(isAllGroup);
}
notifyDataSetChanged();
}
});
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//弹窗 dialog
dialog = new CustomDialog.Builder(context)
.setContent("你确定要删除该商品吗?")
.setLeftText("容朕三思")
.setRightText("朕意已决")
.setLeftOnclick(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
})
.setRightOnClick(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
})
.create();
dialog.show();
}
});
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
class GroupViewHolder{
TextView tvShopName;//店铺名称
ImageView ivGroupCheck;//选择按钮
}
class ChildViewHolder{
ImageView ivGoodsUrl;//商品图片url
TextView tvGoodsName;//商品名称
TextView tvGoodsOriPrice;//原价
TextView tvGoodsPrice;//实际价格
TextView tvGoodsNum;//购买数量
ImageView ivChildCheck;//选择按钮
}
//选中状态的相关判断处理
/**
* 选中与未选中状态下对应的图片状态的
没有合适的资源?快使用搜索试试~ 我知道了~
仿京东中购物车列表模块的实现【以及通过Builder的方式创建dialog弹窗 链式调用】
共72个文件
xml:43个
png:8个
java:6个
需积分: 18 103 下载量 101 浏览量
2017-04-20
17:56:49
上传
评论 3
收藏 169KB ZIP 举报
温馨提示
仿京东中购物车列表模块的实现【以及通过Builder的方式创建dialog弹窗 链式调用】
资源推荐
资源详情
资源评论
收起资源包目录
ShoppingCar.zip (72个子文件)
ShoppingCar
ShoppingCar.iml 865B
gradlew.bat 2KB
gradlew 5KB
gradle.properties 747B
app
proguard-rules.pro 663B
src
test
java
com
json
car
ExampleUnitTest.java 406B
androidTest
java
com
json
car
ExampleInstrumentedTest.java 754B
main
res
mipmap-xxxhdpi
ic_launcher.png 10KB
drawable-hdpi
product.jpg 35KB
check_default.png 493B
sw.png 264B
check_selected.png 739B
drawable
dialog_bg_shape.xml 193B
mipmap-hdpi
ic_launcher.png 3KB
values
colors.xml 214B
strings.xml 77B
styles.xml 907B
dimens.xml 216B
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
layout
item_child_listview.xml 2KB
dialog_layout.xml 2KB
activity_main.xml 1KB
item_group_listview.xml 1KB
values-w820dp
dimens.xml 364B
java
com
json
car
GoodsBean.java 4KB
MainActivity.java 6KB
GoodsExpandableListAdapter.java 10KB
CustomDialog.java 3KB
AndroidManifest.xml 671B
app.iml 13KB
.gitignore 8B
build.gradle 889B
libs
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 233B
.idea
gradle.xml 707B
runConfigurations.xml 564B
misc.xml 2KB
copyright
profiles_settings.xml 76B
modules.xml 359B
compiler.xml 686B
workspace.xml 182KB
libraries
javawriter_2_1_1.xml 330B
jsr305_2_0_1.xml 330B
rules_0_5.xml 722B
javax_annotation_api_1_2.xml 358B
support_core_utils_24_2_1.xml 778B
support_compat_24_2_1.xml 932B
support_media_compat_24_2_1.xml 974B
runner_0_5.xml 728B
support_fragment_24_2_1.xml 946B
support_vector_drawable_24_2_1.xml 641B
support_annotations_24_2_1.xml 497B
hamcrest_library_1_3.xml 342B
support_core_ui_24_2_1.xml 939B
espresso_idling_resource_2_2_2.xml 683B
animated_vector_drawable_24_2_1.xml 646B
support_v4_24_2_1.xml 420B
hamcrest_core_1_3.xml 526B
appcompat_v7_24_2_1.xml 762B
junit_4_12.xml 477B
hamcrest_integration_1_3.xml 354B
espresso_core_2_2_2.xml 628B
javax_inject_1.xml 324B
exposed_instrumentation_api_publish_0_5.xml 701B
inspectionProfiles
Project_Default.xml 828B
profiles_settings.xml 241B
.gitignore 127B
local.properties 500B
settings.gradle 16B
build.gradle 521B
共 72 条
- 1
资源评论
风一样的男人zzz
- 粉丝: 64
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功