控件

本文介绍了一个自定义组合控件Myview及其实现的加减操作,并展示了如何通过多级RecyclerView与自定义Adapter实现商品选择界面的数据绑定与回调机制。

这个是组合控件
public class Myview extends LinearLayout {
TextView jian , shu , jia;
private int num;
GetMyCALL getMyCALL;

public Myview(Context context) {
    super(context);
}

public Myview(Context context,AttributeSet attrs) {
    super(context, attrs);
    View view = LayoutInflater.from(context).inflate(R.layout.activity_listview,this);
    jian = view.findViewById(R.id.list_jian);
    shu = view.findViewById(R.id.list_shu);
    jia = view.findViewById(R.id.list_jia);

    jia.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            num++;
            shu.setText(num+"");
            getMyCALL.setass(num);
        }
    });

    jian.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            num--;
            shu.setText(num+"");
            getMyCALL.setass(num);
        }
    });


}

public Myview(Context context,AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

public void setdata(int num) {
    this.num = num;
    shu.setText(num+"");
}

public interface GetMyCALL{
    public void setass(int nuss);
}


public void setGetMyCALL(GetMyCALL call){
    getMyCALL = call;
}

}

		fragment

public class Show_Fragment extends Fragment implements CounetFace.ViewShowInterFace {
CounetFace.PresenterFace presenterFace;
CheckBox qx;

RecyclerView recyclerView;
TextView zong;
public List<NewsBean.DataBean> n_list = new ArrayList<>();
MyAdapter adapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.show_fragment, container, false);
    qx = view.findViewById(R.id.show_qx);
    recyclerView = view.findViewById(R.id.show_RecyclerView);
    zong = view.findViewById(R.id.show_zong);
    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    presenterFace = new MyPresnter<>(this);
    presenterFace.PshowFace();
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(linearLayoutManager);

    //设置适配器
    adapter = new MyAdapter(n_list, getActivity(), this);
    recyclerView.setAdapter(adapter);

    //全选和反选
    qx.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int sum = 0;
            boolean qxChecked = qx.isChecked();
            if (qxChecked){
                for (int i = 0; i <n_list.size() ; i++) {
                    n_list.get(i).IsSelect = qxChecked;
                    for (int j = 0; j <n_list.get(i).getList().size() ; j++) {
                        n_list.get(i).getList().get(j).ItemIsSelect = qxChecked;
                        //计算总价
                        sum += n_list.get(i).getList().get(j).getPrice()*
                                n_list.get(i).getList().get(j).getNum();
                    }
                }
            }else{
                //计算总价
                sum = 0;
                for (int i = 0; i <n_list.size() ; i++) {
                    n_list.get(i).IsSelect = qxChecked;
                    for (int j = 0; j <n_list.get(i).getList().size() ; j++) {
                        n_list.get(i).getList().get(j).ItemIsSelect = qxChecked;
                    }
                }
            }
            //计算总价
            zong.setText(sum+"");
            adapter.notifyDataSetChanged();
        }
    });

    //回调接口1层
    adapter.setMyCallBackFace(new MyAdapter.MyCallBackFace() {
        @Override
        public void setmycall(List<NewsBean.DataBean> list) {
            int sum = 0;
            int sssum = 0;
            for (int i = 0; i <list.size() ; i++) {
                boolean isSelect = list.get(i).IsSelect;
                if (isSelect){
                    sssum++;
                    for (int j = 0; j <list.get(i).getList().size() ; j++) {
                        //计算总价
                        sum += list.get(i).getList().get(j).getPrice()*
                                list.get(i).getList().get(j).getNum();
                    }
                }else{
                    for (int j = 0; j <list.get(i).getList().size() ; j++) {
                        if (list.get(i).getList().get(j).ItemIsSelect){
                            sum += list.get(i).getList().get(j).getPrice()*
                                    list.get(i).getList().get(j).getNum();
                        }
                    }
                }
            }
            if (sssum == list.size()){
                qx.setChecked(true);
            }else{
                qx.setChecked(false);
            }
            //计算总价
            zong.setText(sum+"");
            adapter.notifyDataSetChanged();
        }
    });


}

// adapter1
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.holder> {
List<NewsBean.DataBean> n_list;
Context context;
Show_Fragment show_fragment;
private MyCallBackFace face;

public MyAdapter(List<NewsBean.DataBean> n_list, Context context, Show_Fragment show_fragment) {
    this.n_list = n_list;
    this.context = context;
    this.show_fragment = show_fragment;
}

@NonNull
@Override
public holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(context).inflate(R.layout.activity_myadapter,null);
    return new holder(view);
}

@Override
public void onBindViewHolder(@NonNull final holder holder, final int i) {
holder.checkBox.setChecked(n_list.get(i).IsSelect);
holder.textView.setText(n_list.get(i).getSellerName());

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    holder.recyclerView.setLayoutManager(linearLayoutManager);

    MyAdapter_Adapter2 adapter2 = new MyAdapter_Adapter2(n_list.get(i).getList(),context,show_fragment);
    holder.recyclerView.setAdapter(adapter2);

    holder.checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean b = holder.checkBox.isChecked();
            n_list.get(i).IsSelect = b;
            for (int j = 0; j <n_list.get(i).getList().size() ; j++) {
               n_list.get(i).getList().get(j).ItemIsSelect = b;
            }
            face.setmycall(n_list);
        }
    });

    adapter2.setMyCallBackFace(new MyAdapter_Adapter2.MyCallBackFace() {
        @Override
        public void setmycall(List<NewsBean.DataBean.ListBean>list) {
            int s = 0;
            for (int j = 0; j <list.size() ; j++) {
                boolean itemIsSelect = list.get(j).ItemIsSelect;
                if (itemIsSelect){
                    s++;
                }
            }
            if (s == list.size()){
                holder.checkBox.setChecked(true);
                n_list.get(i).IsSelect = true;
            }else{
                holder.checkBox.setChecked(false);
                n_list.get(i).IsSelect = false;
            }
            face.setmycall(n_list);
        }
    });
}

@Override
public int getItemCount() {
    return n_list.size();
}

public class holder extends RecyclerView.ViewHolder{
    CheckBox checkBox;
    TextView textView;
    RecyclerView recyclerView;
    public holder(@NonNull View itemView) {
        super(itemView);
        checkBox = itemView.findViewById(R.id.adapter1_CheckBox);
        textView = itemView.findViewById(R.id.adapter1_TextView);
        recyclerView = itemView.findViewById(R.id.adapter1_RecyclerView);
    }
}

public void setMyCallBackFace(MyCallBackFace face){
    this.face = face;
}

//创建一个接口
public interface MyCallBackFace{
    public void setmycall( List<NewsBean.DataBean> n_list);
}

}

	//adapter2

public class MyAdapter_Adapter2 extends RecyclerView.Adapter<MyAdapter_Adapter2.holer> {

List<NewsBean.DataBean.ListBean> n_list;
Context context;
Show_Fragment show_fragment;
private MyCallBackFace face;

public MyAdapter_Adapter2(List<NewsBean.DataBean.ListBean> n_list, Context context, Show_Fragment show_fragment) {
    this.n_list = n_list;
    this.context = context;
    this.show_fragment = show_fragment;
}

@NonNull
@Override
public holer onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(context).inflate(R.layout.activity_adapter2,null);
    return new holer(view);
}

@Override
public void onBindViewHolder(@NonNull final holer holer, final int i) {
    holer.checkBox.setChecked(n_list.get(i).ItemIsSelect);
    holer.price.setText(n_list.get(i).getPrice()+"");
    holer.textView.setText(n_list.get(i).getTitle());
    Glide.with(context).load(n_list.get(i).getImages()).into(holer.imageView);

    holer.checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean checked = holer.checkBox.isChecked();
            n_list.get(i).ItemIsSelect = checked;
            face.setmycall(n_list);
        }
    });

    holer.myview.setdata(n_list.get(i).getNum());

    holer.myview.setGetMyCALL(new Myview.GetMyCALL() {
        @Override
        public void setass(int nuss) {
            n_list.get(i).setNum(nuss);
            face.setmycall(n_list);
        }
    });


}

@Override
public int getItemCount() {
    return n_list.size();
}

public class holer extends RecyclerView.ViewHolder{
    CheckBox checkBox;
    TextView textView , price;
    ImageView imageView;
    Myview myview;
    public holer(@NonNull View itemView) {
        super(itemView);
        //查找控件
        checkBox = itemView.findViewById(R.id.adapter2_checkbox);
        textView = itemView.findViewById(R.id.adapter2_text);
        price = itemView.findViewById(R.id.adapter2_price);
        imageView = itemView.findViewById(R.id.adapter2_ImageView);
        myview = itemView.findViewById(R.id.adapter1_Myview);
    }
}

public void setMyCallBackFace(MyCallBackFace face){
    this.face = face;
}

//创建一个接口
public interface MyCallBackFace{
    public void setmycall(List<NewsBean.DataBean.ListBean> n_list);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值