首先先把二级列表成功实现功能
涉及到 我们的自定义view的一个实现
实现自定义view
public class MyView extends LinearLayout {
private TextView add;
private TextView sex;
private EditText ed_num;
private int num=1;
public MyView(Context context) {
this(context,null);
}
public MyView(Context context,AttributeSet attrs) {
this(context, attrs,0);
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(final Context context) {
View view = LayoutInflater.from(context).inflate(R.layout.myview, this, true);
add = view.findViewById(R.id.add);
sex = view.findViewById(R.id.sex);
ed_num = view.findViewById(R.id.edit_num);
//默认为1
ed_num.setText("1");
//点击加号增加
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
num++;
ed_num.setText(num+"");
if (addMinusCallback!=null){
addMinusCallback.numCallback(num);
}
}
});
//点击减号减少
sex.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
num--;
if (num==0){
num=1;
Toast.makeText(context,"不能为零!",Toast.LENGTH_LONG).show();
}
ed_num.setText(num+"");
if (addMinusCallback!=null){
addMinusCallback.numCallback(num);
}
}
});
}
public void setNumTv(int num){
ed_num.setText(num+"");
}
public int getNum() {
return num;
}
private AddMinusCallback addMinusCallback;
public interface AddMinusCallback{
void numCallback(int num);
}
public void setAddMinusCallback(AddMinusCallback addMinusCallback) {
this.addMinusCallback = addMinusCallback;
}
}
实现自定义view的一个功能
创建两个接口
public interface CartCallback {
void notifyCartItem(boolean isChecked ,int postion);
void notifyNum();
}
public interface CartUICallback {
void notifyCart();
}
在适配器中设置父条目和子条目的一个功能实现计算价格
在父条目适配器中
implements CartCallback
private CartUICallback cartUICallback;
public void setCartUICallback(CartUICallback cartUICallback) {
this.cartUICallback = cartUICallback;
}
public List<CartBean.Cart> getCarts() {
return carts;
}
for (CartBean.Cart.Product product : cart.list) {
product.pos = i;
}
myVh.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cart.isChecked = myVh.checkbox.isChecked();
for (CartBean.Cart.Product product : cart.list) {
product.isProductChecked = cart.isChecked;
}
notifyDataSetChanged();
if (cartUICallback != null) {
cartUICallback.notifyCart();
}
}
});
@Override
public void notifyCartItem(boolean isChecked, int postion) {
carts.get(postion).isChecked = isChecked;
notifyDataSetChanged();
if (cartUICallback != null) {
cartUICallback.notifyCart();
}
}
@Override
public void notifyNum() {
if (cartUICallback != null) {
cartUICallback.notifyCart();
}
}
public void addData(List<CartBean.Cart> list) {
if (list != null && carts != null) {
carts.addAll(list);
notifyDataSetChanged();
}
}
在子条目的适配器中设置
private CartCallback cartCallback;
public void setCartCallback(CartCallback cartCallback) {
this.cartCallback = cartCallback;
}
图片去除https中s的实现
String[] imgs = product.images.split("\\|");
if (imgs != null && imgs.length > 0) {
Glide.with(context).load(imgs[0]).into(myVh.image);
}
自定义view实现加减价格和chebox选中
myVh.myview.setAddMinusCallback(new MyView.AddMinusCallback() {
@Override
public void numCallback(int num) {
product.productNum=num;
if (cartCallback!=null){
cartCallback.notifyNum();
}
}
});
myVh.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!myVh.checkbox.isChecked()){
product.isProductChecked=false;
if (cartCallback!=null){
cartCallback.notifyCartItem(false,product.pos);
}
}else{
product.isProductChecked=true;
for (CartBean.Cart.Product cart : carts) {
if (!cart.isProductChecked){
if (cartCallback!=null){
cartCallback.notifyCartItem(false,product.pos);
}
break;
}
if (cartCallback!=null){
cartCallback.notifyCartItem(true,product.pos);
}
}
}
}
});
其次就在我们的main方法中实现
implements CartContract.IView,CartUICallback,XRecyclerView.LoadingListener
xrv.setLoadingListener(this);
xrv.setLoadingMoreEnabled(true);
设置上拉加载和下拉刷新
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
for (CartBean.Cart cart : carts) {
cart.isChecked=true;
for (CartBean.Cart.Product product : cart.list) {
product.isProductChecked=true;
}
}
}else{
for (CartBean.Cart cart : carts) {
cart.isChecked=false;
for (CartBean.Cart.Product product : cart.list) {
product.isProductChecked=false;
}
}
}
adapter1.notifyDataSetChanged();
getTotalprice();
}
});
父条目勾选子条目的状态
private void getTotalprice() {
double totalprice=0;
for (CartBean.Cart cart : adapter1.getCarts()) {
for (CartBean.Cart.Product product : cart.list) {
if (product.isProductChecked){
totalprice+=product.price*product.productNum;
}
}
}
checkBox.setText("¥:"+totalprice);
}
计算价格的方法
@Override
public void notifyCart() {
getTotalprice();
}
在成功的方法中
if (list!=null){
carts=list;
for (CartBean.Cart cart : carts) {
for (CartBean.Cart.Product product : cart.list) {
product.productNum=1;
}
}
if (page==1){
xrv.refreshComplete();
adapter1=new Adapter1(this,carts);
adapter1.setCartUICallback(this);
xrv.setAdapter(adapter1);
}else{
if (adapter1==null){
adapter1=new Adapter1(this,carts);
adapter1.setCartUICallback(this);
xrv.setAdapter(adapter1);
}else{
adapter1.addData(list);
}
xrv.loadMoreComplete();
}
}
定义一个int page;
@Override
public void onRefresh() {
page=1;
requstData();
}
@Override
public void onLoadMore() {
page++;
requstData();
}