MainActivity
<?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=".view.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20dp"
android:text="购物车"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rec"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#000" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkbox_q"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginRight="20dp"
android:text="全选" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="合计:"
android:textColor="#f00" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_weight="1"
android:text="¥123"
android:textColor="#f00" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="结算"
/>
</LinearLayout>
</LinearLayout>
//商家条目
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
>
<CheckBox
android:id="@+id/checkbox123"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/textt"
android:textColor="#f00"
android:textSize="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/rec_show"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
>
</android.support.v7.widget.RecyclerView>
</LinearLayout>
//商品条目
<?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:id="@+id/checkbox123"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image"
android:layout_width="150dp"
android:layout_height="150dp" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.example.shoppingcart.view.Viewzdy
android:id="@+id/view"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.example.shoppingcart.view.Viewzdy>
</LinearLayout>
//自定义view
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/jian"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"
android:textSize="18dp"
/>
<TextView
android:id="@+id/sum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="123"
android:textSize="18dp"
/>
<Button
android:id="@+id/jia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:textSize="18dp"
/>
</LinearLayout>
//App
package com.example.shoppingcart.app;
import android.app.Application;
import android.os.Environment;
import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//自定义缓存
DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder(this)
.setBaseDirectoryName("images_zjj")
.setBaseDirectoryPath(Environment.getExternalStorageDirectory()).build();
//设置磁盘缓存的配置,生成配置文件
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
.setMainDiskCacheConfig(diskCacheConfig).build();
Fresco.initialize(this, config);
}
}
//契约类
package com.example.shoppingcart.cantract;
import com.example.shoppingcart.util.ServiceApI;
public interface IuWei {
//model
public interface DataModel{
public ServiceApI getData();
}
//presenter
public interface DataPresenter{
public void getData(Object... arg);
}
//view
public interface DataView{
public void showSuccess(Object o);
public void showFail(Throwable o);
}
}
//model
package com.example.shoppingcart.model;
import com.example.shoppingcart.cantract.IuWei;
import com.example.shoppingcart.util.NetWork;
import com.example.shoppingcart.util.ServiceApI;
public class Model implements IuWei.DataModel {
@Override
public ServiceApI getData() {
return NetWork.getNetWork().create(ServiceApI.class);
}
}
//Presenter
package com.example.shoppingcart.presenter;
import com.example.shoppingcart.bean.ShoppingBean;
import com.example.shoppingcart.cantract.IuWei;
import com.example.shoppingcart.model.Model;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
public class Presenter implements IuWei.DataPresenter {
IuWei.DataModel model;
IuWei.DataView view;
public Presenter(IuWei.DataView view) {
this.view = view;
model = new Model();
}
@Override
public void getData(Object... arg) {
//Rexjava
model.getData().myget()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Consumer<ShoppingBean>() {
@Override
public void accept(ShoppingBean shoppingBean) throws Exception {
if (view != null){
view.showSuccess(shoppingBean);
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
view.showFail(throwable);
}
});
}
}
//网路框架Retrofit
package com.example.shoppingcart.util;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class NetWork {
private Retrofit retrofit;
private static NetWork netWork;
private static final String BASE_URI = "https://www.wanandroid.com/";
private NetWork() {
init();
}
public static NetWork getNetWork() {
if (netWork == null) {
synchronized (NetWork.class) {
if (netWork == null) {
netWork = new NetWork();
}
}
}
return netWork;
}
private void init() {
//拦截器
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.build();
retrofit = new Retrofit.Builder()
.client(client)
.baseUrl(BASE_URI)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public <T> T create(final Class<T> service) {
return retrofit.create(service);
}
}
//API
package com.example.shoppingcart.util;
import com.example.shoppingcart.bean.ShoppingBean;
import io.reactivex.Observable;
import retrofit2.http.GET;
public interface ServiceApI {
// https://www.wanandroid.com/tools/mockapi/6523/restaurant-list
@GET("tools/mockapi/6523/restaurant-list")
Observable<ShoppingBean> myget();
}
//view
package com.example.shoppingcart.view;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import com.example.shoppingcart.R;
import com.example.shoppingcart.bean.ShoppingBean;
import com.example.shoppingcart.cantract.IuWei;
import com.example.shoppingcart.presenter.Presenter;
import com.example.shoppingcart.util.ShoppingAdapter;
import java.util.List;
public class MainActivity extends AppCompatActivity implements IuWei.DataView {
private Presenter presenter;
private RecyclerView rec;
private CheckBox checkboxQ;
private ShoppingAdapter shoppingAdapter;
private List<ShoppingBean.DataBean> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkboxQ = (CheckBox) findViewById(R.id.checkbox_q);
rec = (RecyclerView) findViewById(R.id.rec);
Presenter presenter = new Presenter(this);
presenter.getData();
checkboxQ.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkAll(isChecked);
}
});
}
@Override
public void showSuccess(Object o) {
ShoppingBean shoppingBean = (ShoppingBean) o;
list = shoppingBean.getData();
init(list);
}
@Override
public void showFail(Throwable o) {
}
private void init(List<ShoppingBean.DataBean> list) {
LinearLayoutManager manager = new LinearLayoutManager(this);
rec.setLayoutManager(manager);
shoppingAdapter = new ShoppingAdapter(list, this);
rec.setAdapter(shoppingAdapter);
}
//全选
private void checkAll(boolean isChecked) {
for (int i = 0; i < list.size(); i++) {
ShoppingBean.DataBean dataBean = list.get(i);
dataBean.setCheck(isChecked);
List<ShoppingBean.DataBean.SpusBean> spus = dataBean.getSpus();
for (int j = 0; j < spus.size(); j++) {
ShoppingBean.DataBean.SpusBean spusBean = spus.get(j);
spusBean.setCheck(isChecked);
}
}
shoppingAdapter.notifyDataSetChanged();
}
}
//自定义view类
package com.example.shoppingcart.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.example.shoppingcart.R;
public class Viewzdy extends LinearLayout {
private TextView sum;
int num;
private Button jian;
private Button jia;
public Viewzdy(Context context) {
super(context);
}
public Viewzdy(final Context context, AttributeSet attrs) {
super(context, attrs);
View view = LayoutInflater.from(context).inflate(R.layout.viewzzz, this);
sum = (TextView) view.findViewById(R.id.sum);
jian = (Button)view.findViewById(R.id.jian);
jia = (Button) view.findViewById(R.id.jia);
jia.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
num++;
sum.setText(num+"");
}
});
jian.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (num>0){
num--;
sum.setText(num+"");
}else {
Toast.makeText(context,"够了",Toast.LENGTH_SHORT).show();
}
}
});
}
public Viewzdy(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
//adapter
package com.example.shoppingcart.util;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import com.example.shoppingcart.R;
import com.example.shoppingcart.bean.ShoppingBean;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
public class ShoppingAdapter extends RecyclerView.Adapter {
List<ShoppingBean.DataBean> list;
Context context;
private List<ShoppingBean.DataBean.SpusBean> spus;
public ShoppingAdapter(List<ShoppingBean.DataBean> list, Context context) {
this.list = list;
this.context = context;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new asd(LayoutInflater.from(context).inflate(R.layout.text,null));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if (viewHolder instanceof asd ) {
ShoppingBean.DataBean dataBean = list.get(i);
((asd) viewHolder).textt.setText(dataBean.getName());
//二级列表
((asd) viewHolder).recShow.setLayoutManager(new LinearLayoutManager(context));
for (int j = 0; j <list.size() ; j++) {
spus = list.get(i).getSpus();
}
AdapterS adapterS = new AdapterS(spus, context);
((asd) viewHolder).recShow.setAdapter(adapterS);
//全选checkbox绑定
((asd) viewHolder).checkbox123.setChecked(list.get(i).isCheck());
}
}
@Override
public int getItemCount() {
return list.size();
}
class asd extends RecyclerView.ViewHolder {
private TextView textt;
private CheckBox checkbox123;
private RecyclerView recShow;
public asd(@NonNull View itemView) {
super(itemView);
textt = (TextView) itemView.findViewById(R.id.textt);
checkbox123 = (CheckBox)itemView. findViewById(R.id.checkbox123);
recShow = (RecyclerView)itemView. findViewById(R.id.rec_show);
}
}
}
//adapter
package com.example.shoppingcart.util;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import com.example.shoppingcart.R;
import com.example.shoppingcart.bean.ShoppingBean;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
public class AdapterS extends RecyclerView.Adapter {
List<ShoppingBean.DataBean.SpusBean> list;
Context context;
public AdapterS(List<ShoppingBean.DataBean.SpusBean> list, Context context) {
this.list = list;
this.context = context;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new asd(LayoutInflater.from(context).inflate(R.layout.text2, null));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if (viewHolder instanceof asd) {
((asd) viewHolder).image.setImageURI(list.get(i).getPic_url());
((asd) viewHolder).text.setText(list.get(i).getName());
((asd) viewHolder).checkbox123.setChecked(list.get(i).isCheck());
}
}
@Override
public int getItemCount() {
return list.size();
}
class asd extends RecyclerView.ViewHolder {
private CheckBox checkbox123;
private SimpleDraweeView image;
private TextView text;
public asd(@NonNull View itemView) {
super(itemView);
checkbox123 = (CheckBox) itemView.findViewById(R.id.checkbox123);
image = (SimpleDraweeView) itemView.findViewById(R.id.image);
text = (TextView) itemView.findViewById(R.id.text);
}
}
}
//全选bean里boolean
private boolean isCheck=false;
public boolean isCheck() {
return isCheck;
}
public void setCheck(boolean check) {
isCheck = check;
}
//
private boolean isCheck=false;
public boolean isCheck() {
return isCheck;
}
public void setCheck(boolean check) {
isCheck = check;
}