MainActivity的代码
package com.example.shop;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
public class Main2Activity extends AppCompatActivity {
private static final String TAG = "Main2Activity";
private TextView edit;
private TextView countPrice;
private ListView lv;
private LinearLayout ll;
private Button all;
private Button invert;
private Button noAll;
private Button send;
private List<Food> foodList;
private boolean[] checked = new boolean[]{false,false,false};
private boolean flag = false;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
edit = (TextView) findViewById(R.id.edit);
countPrice = (TextView) findViewById(R.id.countPrice);
lv = (ListView) findViewById(R.id.lv);
ll = (LinearLayout) findViewById(R.id.ll);
all = (Button) findViewById(R.id.all);
invert = (Button) findViewById(R.id.invert);
noAll = (Button) findViewById(R.id.noAll);
send = (Button) findViewById(R.id.send);
all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < checked.length; i++) {
if(i==0){
checked[i] = true;
}else{
checked[i] = false;
}
}
myAdapter.notifyDataSetChanged();
}
});
invert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < checked.length; i++) {
if(i==1){
checked[i] = true;
}else{
checked[i] = false;
}
}
myAdapter.notifyDataSetChanged();
}
});
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(flag){
flag = false;
myAdapter.notifyDataSetChanged();
}else{
flag = true;
myAdapter.notifyDataSetChanged();
}
}
});
foodList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Food food = new Food();
food.setNum(0);
food.setChecked(false);
food.setPrice(10.0);
food.setTitle("标题");
food.setType(i % 2);
foodList.add(food);
}
myAdapter = new MyAdapter();
lv.setAdapter(myAdapter);
}
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return foodList.size();
}
@Override
public Object getItem(int position) {
return foodList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return foodList.get(position).getType();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
ViewHolder2 viewHolder2 = null;
if (convertView == null) {
if (foodList.get(position).getType() == 0) {
viewHolder2 = new ViewHolder2();
convertView = LayoutInflater.from(Main2Activity.this).inflate(R.layout.title_layout, null);
viewHolder2.name = convertView.findViewById(R.id.t);
convertView.setTag(viewHolder2);
viewHolder2.name.setText(foodList.get(position).getTitle());
} else {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(Main2Activity.this).inflate(R.layout.lv_layout, null);
viewHolder.title = convertView.findViewById(R.id.title);
viewHolder.select = convertView.findViewById(R.id.select);
viewHolder.sub = convertView.findViewById(R.id.sub);
viewHolder.add = convertView.findViewById(R.id.add);
viewHolder.count = convertView.findViewById(R.id.count);
viewHolder.price = convertView.findViewById(R.id.price);
convertView.setTag(viewHolder);
}
}else{
if (foodList.get(position).getType() == 0) {
viewHolder2 = (ViewHolder2) convertView.getTag();
viewHolder2.name.setText(foodList.get(position).getTitle());
} else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.price.setText(foodList.get(position).getPrice() + "");
}
}
if (foodList.get(position).getType() == 0) {
viewHolder2 = (ViewHolder2) convertView.getTag();
viewHolder2.name.setText(foodList.get(position).getTitle());
} else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.price.setText(foodList.get(position).getPrice() + "");
if (flag){
viewHolder.select.setVisibility(View.VISIBLE);
Food food = Share.map.get(position);
if(food != null){
viewHolder.count.setText(food.getNum()+"");
}
for (int i = 0; i < checked.length ; i++) {
if(checked[i] && i==0){
viewHolder.select.setChecked(true);
}
if(checked[i] && i ==1){
Log.i(TAG, "getView: ---");
if(viewHolder.select.isChecked()){
viewHolder.select.setChecked(false);
}else{
viewHolder.select.setChecked(true);
}
}
}
viewHolder.add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Food food = foodList.get(position);
double price = food.getPrice();
food.setNum(food.getNum() +1);
Share.map.put(position,food);
Share.p += price;
countPrice.setText(Share.p+"");
notifyDataSetChanged();
}
});
viewHolder.sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Food food = foodList.get(position);
double price = food.getPrice();
food.setNum(food.getNum() -1);
Share.map.put(position,food);
Share.p -= price;
countPrice.setText(Share.p+"");
notifyDataSetChanged();
}
});
}else{
viewHolder.select.setVisibility(View.INVISIBLE);
}
}
return convertView;
}
class ViewHolder {
TextView title;
CheckBox select;
TextView sub;
TextView add;
TextView count;
TextView price;
}
class ViewHolder2 {
TextView name;
}
}
}
布局文件xml
<?xml version="1.0" encoding="utf-8"?>
<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=".Main2Activity">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/edit"
android:text="编辑"
android:textSize="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/countPrice"
android:text="0.0"
android:textSize="20dp"
android:layout_marginLeft="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
<LinearLayout
android:layout_weight="6"
android:layout_width="match_parent"
android:layout_height="0dp">
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/ll">
<Button
android:id="@+id/all"
android:text="全选"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
<Button
android:id="@+id/invert"
android:text="反选"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
<Button
android:id="@+id/noAll"
android:text="全部取消"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
<Button
android:id="@+id/send"
android:text="跳转"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</LinearLayout>
</LinearLayout>
listView的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
android:focusable="false"
android:focusableInTouchMode="false"
></CheckBox>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/title"
android:text="商品名字">
</TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sub"
android:text=" - "
android:layout_marginLeft="20dp"
android:textSize="20dp"
></TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:id="@+id/count"
></TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/add"
android:textSize="20dp"
android:text=" + "></TextView>
<TextView
android:id="@+id/price"
android:text="价格"
android:layout_marginLeft="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
共享的类
package com.example.shop;
import java.util.HashMap;
public class Share {
public static Double p = 0.0;
public static HashMap<Integer,Food> map = new HashMap<>();
}
实物类
package com.example.shop;
public class Food {
private int num;
private String title;
private boolean checked;
private double price;
private int type;
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getType() {
return type;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public void setType(int type) {
this.type = type;
}
}
标题的布局
<?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">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/titleCheck"
android:visibility="invisible"></CheckBox>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/t"
android:text="我是店铺1"></TextView>
</LinearLayout>