二级列表购物车
《依赖》
implementation ‘com.squareup.retrofit2:adapter-rxjava2:2.4.0’
implementation ‘com.squareup.retrofit2:converter-gson:2.4.0’
implementation ‘io.reactivex.rxjava2:rxandroid:2.1.0’
implementation ‘com.android.support:recyclerview-v7:28.0.0’
implementation ‘com.facebook.fresco:fresco:1.13.0’
《布局》
《activity_main》
<!--用来展示商家的-->
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/layout" />
<RelativeLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="全选" />
<TextView
android:id="@+id/tv_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/checkbox"
android:text="0.0"
android:textColor="#d43c3c" />
<RelativeLayout
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:background="#d43c3c">
<TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="去结算(0)"
android:textColor="#ffffff" />
</RelativeLayout>
</RelativeLayout>
《商家列表显示布局》
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/checkbox" />
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_child"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/layout" />
《子布局显示所有数据》
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="10dp">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true" />
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/simple"
android:layout_width="100dp"
android:layout_height="80dp"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/checkbox"
app:placeholderImage="@mipmap/ic_launcher" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/simple">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1233" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="123"
android:textColor="#d43c3c" />
<com.bawei.mymvp.view.ViewApp
android:id="@+id/view_app"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true" />
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
《Fresco图片控件使用时的调用与自定义缓存路径》
——>然后在清单文件中name调用此类
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
// Fresco.initialize(this)不添加缓存路径直接调用使用
Fresco.initialize(this, ImagePipelineConfig.newBuilder(App.this)
.setMainDiskCacheConfig(
DiskCacheConfig.newBuilder(this)
//磁盘缓存路径
.setBaseDirectoryPath(new File(Environment.getExternalStorageDirectory().getAbsolutePath())) // 注意Android运行时权限。
.setMaxCacheSize(10 * 1024 * 1024)
.build()
)
.build()
);
}
}
《MainActivity 》
public class MainActivity extends AppCompatActivity implements Views, View.OnClickListener {
private PresenterIml presenterIml;
private RecyclerView recycler;
private CheckBox checkbox;
private TextView num;
private TextView price;
private List<JsonBean.DataBean> list = new ArrayList<>();
private JsonAdapter jsonAdapter;
private CheckBox mcheckbox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
presenterIml = new PresenterIml(new ModelIml(), this);
recycler = (RecyclerView) findViewById(R.id.recycler);
mcheckbox = (CheckBox) findViewById(R.id.checkbox);
mcheckbox.setOnClickListener(this);
num = (TextView) findViewById(R.id.tv_num);
price = (TextView) findViewById(R.id.tv_price);
presenterIml.get(0, "/ks/product/getCarts?uid=51", null);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
jsonAdapter = new JsonAdapter(this);
recycler.setLayoutManager(linearLayoutManager);
recycler.setAdapter(jsonAdapter);
//接受改变回传过来的数据
jsonAdapter.setChannerListListener(new JsonAdapter.ChannerListListener() {
@Override
public void changeList(List<JsonBean.DataBean> list) {
float p = 0;
int allnum = 0;
int shopCarNum = 0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).isChecked()) {
shopCarNum++;
}
List<JsonBean.DataBean.ListBean> childList = list.get(i).getList();//得到商家下的商品集合
for (int j = 0; j < childList.size(); j++) {
if (childList.get(j).isChecked()) {//必须为选中
float q = childList.get(j).getPrice();//取价格
int n = childList.get(j).getNum();//取个数
allnum = allnum + n;//计算选中的商品个数
p = p + (q * n);//计算选中的商品总价
}
}
}
if (shopCarNum == list.size()) {//所有的商家选中
mcheckbox.setChecked(true);
} else {
mcheckbox.setChecked(false);
}
//设置
price.setText("去结算(" + p + "¥");
num.setText(allnum + "件");
}
});
}
@Override
public void onClick(View v) {
int allnum = 0;
float p = 0;
switch (v.getId()) {
case R.id.checkbox://获取外层商家checkbox选择状态
boolean isChecked = mcheckbox.isChecked();
for (int i = 0; i < list.size(); i++) {
list.get(i).setChecked(isChecked);//遍历获取所有商家的状态
List<JsonBean.DataBean.ListBean> beans = this.list.get(i).getList();//所有商品的集合
for (int j = 0; j < beans.size(); j++) {
beans.get(j).setChecked(isChecked);//遍历获取所有商品的状态
int s = beans.get(j).getNum();
float q = beans.get(j).getPrice();
p = p + (q * s);
allnum = allnum + s;
}
}
if (!isChecked) {
p = 0.0f;
allnum = 0;
}
price.setText("去结算(" + p + "¥");
num.setText(allnum + "件");
jsonAdapter.setList(list);//刷新适配器将list集合赋给适配器
break;
}
}
@Override
public void success(int type, String data) {
if (type == 0) {
JsonBean bean = new Gson().fromJson(data, JsonBean.class);
list = bean.getData();
list.remove(0);
jsonAdapter.setList(list);
}
}
@Override
public void fail(int type, String error) {
}
}
《主适配器显示商家信息》
public class JsonAdapter extends RecyclerView.Adapter<JsonAdapter.ViewHolder> {
private final Context context;
private List<JsonBean.DataBean> list = new ArrayList<>();
public JsonAdapter(Context context) {
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.itme_all, null);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
viewHolder.name.setText(list.get(i).getSellerName());
viewHolder.checkbox.setChecked(list.get(i).isChecked());
AllAdapter allAdapter = new AllAdapter(context, list.get(i).getList());
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
viewHolder.recycler.setLayoutManager(linearLayoutManager);
viewHolder.recycler.setAdapter(allAdapter);
viewHolder.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean ischecked = viewHolder.checkbox.isChecked();//获取商家的选中状态
list.get(i).setChecked(ischecked);//改变商家的状态
List<JsonBean.DataBean.ListBean> beanList = JsonAdapter.this.list.get(i).getList();//获取所有商品的集合
for (int j = 0; j < beanList.size(); j++) {
beanList.get(j).setChecked(ischecked);//遍历更改商品状态
}
notifyDataSetChanged();//刷新当前条目
mChannerListListener.changeList(list);//将遍历改变之后的集合回传个使用页面
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public void setList(List<JsonBean.DataBean> list) {
this.list = list;
notifyDataSetChanged();
}
public class ViewHolder extends RecyclerView.ViewHolder {
CheckBox checkbox;
TextView name;
RecyclerView recycler;
public ViewHolder(@NonNull View itemView) {
super(itemView);
checkbox = (CheckBox) itemView.findViewById(R.id.checkbox);
name = (TextView) itemView.findViewById(R.id.tv_name);
recycler = (RecyclerView) itemView.findViewById(R.id.recycler_child);
}
}
private ChannerListListener mChannerListListener;
public void setChannerListListener(ChannerListListener mChannerListListener) {
this.mChannerListListener = mChannerListListener;
}
public interface ChannerListListener {
void changeList(List<JsonBean.DataBean> list);
}
}
《子适配器显示所有商品信息》
public class AllAdapter extends RecyclerView.Adapter<AllAdapter.ViewHolder> {
private final Context context;
private List<JsonBean.DataBean.ListBean> list = new ArrayList<>();
public AllAdapter(Context context, List<JsonBean.DataBean.ListBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.itme_chilall, null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
viewHolder.checked.setChecked(list.get(i).isChecked());//获取商品选中状态
viewHolder.price.setText(list.get(i).getPrice() + "");
viewHolder.simple.setImageURI(list.get(i).getImages());
viewHolder.title.setText(list.get(i).getTitle());
int num = list.get(i).getNum();
viewHolder.viewapp.setNum(num);
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
CheckBox checked;
SimpleDraweeView simple;
TextView price, title;
ViewApp viewapp;
public ViewHolder(@NonNull View itemView) {
super(itemView);
checked = (CheckBox) itemView.findViewById(R.id.checkbox);
simple = (SimpleDraweeView) itemView.findViewById(R.id.simple);
title = (TextView) itemView.findViewById(R.id.tv_title);
price = (TextView) itemView.findViewById(R.id.tv_price);
viewapp = (ViewApp) itemView.findViewById(R.id.view_app);
}
}
}
《自定义加减器 ViewApp 》
public class ViewApp extends RelativeLayout {
private TextView jian;
private TextView jia;
private EditText text;
public ViewApp(Context context) {
super(context);
init(context);
}
public ViewApp(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
View view = View.inflate(context, R.layout.itme_add, null);
jian = (TextView) view.findViewById(R.id.tv_jian);
jia = (TextView) view.findViewById(R.id.tv_jia);
text = (EditText) view.findViewById(R.id.ed_text);
addView(view);
}
public void setNum(int num) {
text.setText(num + "");
}
}
《效果图》 未写完 加 减数据代码还未写