Android擬京東ショッピングカート---完全コード(三)
15267 ワード
activity
adapter
カスタムビュー
カスタムviewレイアウト
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
ExpandableListView expandableListView;
Context context;
private CheckBox checkall;
private TextView allpay;
private TextView allprice;
private TextView allnum;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = MainActivity.this;
initView();
initData();
}
private void initView() {
expandableListView = findViewById(R.id.main_expand);
checkall = findViewById(R.id.main_check);
allnum = findViewById(R.id.main_numb);
allprice = findViewById(R.id.main_price);
allpay = findViewById(R.id.main_pay);
checkall.setOnClickListener(this);
}
private void initData() {
String url = "https://www.zhaoapi.cn/product/getCarts?uid=71";
new OkHttpClient.Builder().build().newCall(new Request.Builder().url(url).build()).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(final Call call, Response response) throws IOException {
final String responses = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
//
Gson gson = new Gson();
MyBean myBean = gson.fromJson(responses, MyBean.class);
List data = myBean.getData();
myAdapter = new MyAdapter(context, data);
expandableListView.setAdapter(myAdapter);
//
for (int i = 0; i < data.size(); i++) {
expandableListView.expandGroup(i);
}
//
myAdapter.setOnChangeLinsenter(new MyAdapter.OnChangeLinsenter() {
@Override
public void shopChange(int i) {
boolean shop = myAdapter.isShop(i);
myAdapter.shopall(i, !shop);
myAdapter.notifyDataSetChanged();
refreshall();
}
@Override
public void goodChange(int i, int i1) {
myAdapter.goodselect(i, i1);
myAdapter.notifyDataSetChanged();
refreshall();
}
@Override
public void goodnumChange(int i, int i1, int num) {
myAdapter.numshange(i, i1, num);
myAdapter.notifyDataSetChanged();
refreshall();
}
});
}
});
}
});
}
@Override
public void onClick(View view) {
switch (view.getId()) {
//
case R.id.main_check:
//
boolean allChecked = myAdapter.isAllChecked();
myAdapter.changeAll(!allChecked);
//
myAdapter.notifyDataSetChanged();
//
refreshall();
break;
}
}
//
private void refreshall() {
boolean allChecked = myAdapter.isAllChecked();
checkall.setChecked(allChecked);
double allprie = myAdapter.allPrice();
allprice.setText(" :¥" + allprie);
int snum = myAdapter.allNum();
allnum.setText(" " + snum + " ");
}
}
adapter
/**
*
*
* ( )
*/
public class MyAdapter extends BaseExpandableListAdapter {
List data;
Context context;
public MyAdapter(Context context, List data) {
this.context = context;
this.data = data;
}
@Override
public int getGroupCount() {
return data.size();
}
@Override
public int getChildrenCount(int i) {
return data.get(i).getList().size();
}
@Override
public Object getGroup(int i) {
return null;
}
@Override
public Object getChild(int i, int i1) {
return null;
}
@Override
public long getGroupId(int i) {
return 0;
}
@Override
public long getChildId(int i, int i1) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
// -----
@Override
public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
// Holder
GroupViewHolder groupViewHolder = null;
if (view == null) {
groupViewHolder = new GroupViewHolder();
view = View.inflate(context, R.layout.grouplayout, null);
groupViewHolder.group_checkBox = view.findViewById(R.id.group_check);
groupViewHolder.group_textView = view.findViewById(R.id.group_name);
view.setTag(groupViewHolder);
} else {
groupViewHolder = (GroupViewHolder) view.getTag();
}
//
groupViewHolder.group_textView.setText(data.get(i).getSellerName());
//
boolean shop = isShop(i);
groupViewHolder.group_checkBox.setChecked(shop);
/**
*
*/
groupViewHolder.group_checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (onChangeLinsenter != null) {
onChangeLinsenter.shopChange(i);
}
}
});
return view;
}
//
public boolean isShop(int i) {
//
List list = data.get(i).getList();
for (int j = 0; j < list.size(); j++) {
if (list.get(j).getSelected() == 0) {
return false;
}
}
return true;
}
// -----
@Override
public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
ChildViewHolder childViewHolder = null;
if (view == null) {
childViewHolder = new ChildViewHolder();
view = View.inflate(context, R.layout.childlayout, null);
childViewHolder.child_checkBox = view.findViewById(R.id.child_check);
childViewHolder.child_image = view.findViewById(R.id.child_image);
childViewHolder.child_name = view.findViewById(R.id.child_name);
childViewHolder.child_price = view.findViewById(R.id.child_price);
childViewHolder.myView = view.findViewById(R.id.child_myview);
view.setTag(childViewHolder);
} else {
childViewHolder = (ChildViewHolder) view.getTag();
}
childViewHolder.child_name.setText(data.get(i).getList().get(i1).getTitle());
double price = data.get(i).getList().get(i1).getPrice();
String prices = String.valueOf(price);
childViewHolder.child_price.setText("¥" + prices);
String images = data.get(i).getList().get(i1).getImages();
if (images.contains("|")) {
String[] split = images.split("\\|");
Picasso.with(context).load(split[0]).into(childViewHolder.child_image);
} else {
Picasso.with(context).load(images).into(childViewHolder.child_image);
}
//
List list = data.get(i).getList();
childViewHolder.child_checkBox.setChecked(list.get(i1).getSelected() == 1);
childViewHolder.child_checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onChangeLinsenter.goodChange(i, i1);
}
});
//
childViewHolder.myView.setOnNumChange(new MyView.onNumChange() {
@Override
public void onNumberChange(int number) {
onChangeLinsenter.goodnumChange(i, i1, number);
}
});
return view;
}
//
public void shopall(int i, boolean b) {
List list = data.get(i).getList();
for (int j = 0; j < list.size(); j++) {
list.get(j).setSelected(b ? 1 : 0);
}
}
//
public void goodselect(int i, int i1) {
MyBean.DataBean.ListBean listBean = data.get(i).getList().get(i1);
listBean.setSelected(listBean.getSelected() == 0 ? 1 : 0);
}
//
public void numshange(int i, int i1, int number) {
MyBean.DataBean.ListBean listBean = data.get(i).getList().get(i1);
listBean.setNum(number);
}
//
public int allNum() {
int numa = 0;
for (int i = 0; i < data.size(); i++) {
List list = data.get(i).getList();
for (int j = 0; j < list.size(); j++) {
if (list.get(j).getSelected() == 1) {
int num = list.get(j).getNum();
numa += num;
}
}
}
return numa;
}
//
public double allPrice() {
double allpro = 0;
for (int i = 0; i < data.size(); i++) {
List list = data.get(i).getList();
for (int j = 0; j < list.size(); j++) {
if (list.get(j).getSelected() == 1) {
double price = list.get(j).getPrice();
int num = list.get(j).getNum();
allpro += price * num;
}
}
}
return allpro;
}
//
public boolean isAllChecked() {
for (int i = 0; i < data.size(); i++) {
List list = data.get(i).getList();
for (int j = 0; j < list.size(); j++) {
if (list.get(j).getSelected() == 0) {
return false;
}
}
}
return true;
}
//
public void changeAll(boolean b) {
for (int i = 0; i < data.size(); i++) {
List list = data.get(i).getList();
for (int j = 0; j < list.size(); j++) {
list.get(j).setSelected(b ? 1 : 0);
}
}
}
@Override
public boolean isChildSelectable(int i, int i1) {
return false;
}
// ViewHolder
public static class GroupViewHolder {
CheckBox group_checkBox;
TextView group_textView;
}
// ViewHolder
public static class ChildViewHolder {
CheckBox child_checkBox;
TextView child_name, child_price;
ImageView child_image;
MyView myView;
}
OnChangeLinsenter onChangeLinsenter;
//
public void setOnChangeLinsenter(OnChangeLinsenter onChangeLinsenter) {
this.onChangeLinsenter = onChangeLinsenter;
}
//
public interface OnChangeLinsenter {
void shopChange(int i);
void goodChange(int i, int i1);
void goodnumChange(int i, int i1, int num);
}
}
カスタムビュー
//
public class MyView extends LinearLayout implements View.OnClickListener {
TextView tv_sub_view;
TextView tv_number_view;
TextView tv_add_view;
private int number = 1;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
tv_number_view.setText(number + "");
}
public MyView(Context context) {
this(context, null);
}
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
View inflate = LayoutInflater.from(context).inflate(R.layout.myviewlayout, this);
tv_sub_view = inflate.findViewById(R.id.dec);
tv_number_view = inflate.findViewById(R.id.num);
tv_add_view = inflate.findViewById(R.id.add);
//
tv_sub_view.setOnClickListener(this);
tv_add_view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.dec:
if (number > 1) {
--number;
tv_number_view.setText(number + "");
if (onNumChange != null) {
onNumChange.onNumberChange(number);
}
} else {
Toast.makeText(getContext(), " 1", Toast.LENGTH_SHORT).show();
}
break;
case R.id.add:
++number;
tv_number_view.setText(number + "");
if (onNumChange != null) {
onNumChange.onNumberChange(number);
}
break;
}
}
onNumChange onNumChange;
public void setOnNumChange(MyView.onNumChange onNumChange) {
this.onNumChange = onNumChange;
}
public interface onNumChange {
void onNumberChange(int number);
}
}
カスタムviewレイアウト