淘宝购物

发布时间:2024-12-20 14:10

淘宝内部的'淘金币'、'淘宝折上折'等优惠券能有效降低购物成本 #生活技巧# #节省生活成本# #购物优惠技巧# #比价购物软件#

1.购物车主页面

public class ShopFragmentFragment extends BaseFragment<ShopFragmentPresenter> implements ShopFragmentContract.View {

    Unbinder unbinder;
    @BindView(R.id.rece_shop)
    RecyclerView receShop;
    @BindView(R.id.check_all)
    CheckBox checkAll;
    @BindView(R.id.text_zongjia)
    TextView textZongjia;
    @BindView(R.id.btn_tijiao)
    Button btnTijiao;
    private News4 news4;
    private MyWaiAdapter myWaiAdapter;
    private int b;


    public static ShopFragmentFragment newInstance() {
        ShopFragmentFragment fragment = new ShopFragmentFragment();
        return fragment;
    }

    @Override
    public void setupFragmentComponent(@NonNull AppComponent appComponent) {
        DaggerShopFragmentComponent //如找不到该类,请编译一下项目
                .builder()
                .appComponent(appComponent)
                .shopFragmentModule(new ShopFragmentModule(this))
                .build()
                .inject(this);
    }

    @Override
    public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_shop, container, false);
    }


    @Override
    public void initData(@Nullable Bundle savedInstanceState) {
        mPresenter.shoping();
    }


    @Override
    public void setData(@Nullable Object data) {

    }

    @Override
    public void showLoading() {

    }

    @Override
    public void hideLoading() {

    }

    @Override
    public void showMessage(@NonNull String message) {
        checkNotNull(message);
        ArmsUtils.snackbarText(message);
    }

    @Override
    public void launchActivity(@NonNull Intent intent) {
        checkNotNull(intent);
        ArmsUtils.startActivity(intent);
    }

    @Override
    public void killMyself() {

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO: inflate a fragment view
        View rootView = super.onCreateView(inflater, container, savedInstanceState);
        unbinder = ButterKnife.bind(this, rootView);
        //注册eventbus
        // EventBus.getDefault().register(getActivity());
        mPresenter.shoping();
        return rootView;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }

    @Override
    public void showDatashop(String json) {
        Gson gson = new Gson();
        news4 = gson.fromJson(json, News4.class);
        List<News4.DataBean> data = news4.getData();
        //设置外层条目
        LinearLayoutManager manager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
        myWaiAdapter = new MyWaiAdapter(R.layout.wai_layout, data);
        receShop.setAdapter(myWaiAdapter);
        receShop.setLayoutManager(manager);
        //对适配回调的内容进行监听
        myWaiAdapter.setOnCheckedChangeLisenter(new MyWaiAdapter.OnCheckedChangeLisenter() {
            @Override
            public void onChecked(int layoutPosition, boolean isChecked) {
                //全选条目的标识
                boolean isAllChecked = true;
                //外层条目的判断
                for (int i = 0; i < news4.getData().size(); i++) {
                    boolean checked = news4.getData().get(i).getChecked();
                    //内层条目的判断
                    for (int j = 0; j < news4.getData().get(i).getList().size(); j++) {
                        boolean innerChecked = news4.getData().get(i).getList().get(j).getInnerChecked();
                        isAllChecked = (isAllChecked & checked & innerChecked);
                    }
                }

                checkAll.setChecked(isAllChecked);
                //外层条目
                //outterBean.getData().get(layoutPosition).setOutterChecked(isChecked);
                //刷新适配器
                myWaiAdapter.notifyDataSetChanged();
            }

            public void onOutterIntemChecked(int layoutPosition, boolean checked) {
                news4.getData().get(layoutPosition).setChecked(checked);
                //全选条目的标识
                boolean isAllChecked = true;
                //外层条目的判断
                for (int i = 0; i < news4.getData().size(); i++) {
                    boolean checked1 = news4.getData().get(i).getChecked();
                    //内层条目的判断
                    for (int j = 0; j < news4.getData().get(i).getList().size(); j++) {
                        boolean innerChecked = news4.getData().get(i).getList().get(j).getInnerChecked();
                        isAllChecked = (isAllChecked & checked1 & innerChecked);
                    }
                }

                checkAll.setChecked(isAllChecked);
                //外层条目
                //outterBean.getData().get(layoutPosition).setOutterChecked(isChecked);
                //刷新适配器
                myWaiAdapter.notifyDataSetChanged();
            }
        });
    }


    @Override
    public void error(String s) {

    }

    @OnClick(R.id.check_all)
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.check_all:
                if (checkAll.isChecked()) {
                    //如果全选被选中,最外层的是否选中的状态手动更改为true,刷新适配器
                    for (int i = 0; i < news4.getData().size(); i++) {
                        news4.getData().get(i).setChecked(true);
                        for (int j = 0; j < news4.getData().get(i).getList().size(); j++) {
                            news4.getData().get(i).getList().get(j).setInnerChecked(true);
                        }
                    }
                } else {
                    //如果全选未被选中,最外层的是否选中的状态手动更改为true,刷新适配器
                    for (int i = 0; i < news4.getData().size(); i++) {
                        news4.getData().get(i).setChecked(false);
                        for (int j = 0; j < news4.getData().get(i).getList().size(); j++) {
                            news4.getData().get(i).getList().get(j).setInnerChecked(false);
                        }
                    }
                }
                initview();
                myWaiAdapter.notifyDataSetChanged();
                break;
        }
    }

    //总价
    private void initview() {
        int zong = 0;
        for (int i = 0; i < news4.getData().size(); i++) {
            for (int j = 0; j < news4.getData().get(i).getList().size(); j++) {
                if (news4.getData().get(i).getList().get(j).getInnerChecked()) {
                    zong += news4.getData().get(i).getList().get(j).getPrice() * news4.getData().get(i).getList().get(j).getNum();
                }
            }
        }
        textZongjia.setText("总价是:" + zong);
        myWaiAdapter.notifyDataSetChanged();
    }

    @Override
    public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }

    @Override
    public void onStop() {
        super.onStop();
        EventBus.getDefault().unregister(this);
    }

    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void onEvent(User user) {/* Do something */
        initview();
//        Toast.makeText(getActivity(), "aaa", Toast.LENGTH_SHORT).show();
    }

    ;

    @OnClick(R.id.btn_tijiao)
    public void onViewClicked() {

        Intent intent = new Intent(getActivity(), DingdanActivity.class);
        startActivity(intent);
    }


}
2.bean类1

public static class DataBean {
        /**
         * list : [{"bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg","num":5,"pid":57,"price":5199,"pscid":40,"selected":1,"sellerid":1,"subhead":"【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统","title":"小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银\r\n"},{"bargainPrice":99,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg","num":1,"pid":45,"price":2999,"pscid":39,"selected":0,"sellerid":1,"subhead":"高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!","title":"一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机"}]
         * sellerName : 商家1
         * sellerid : 1
         */

        private String sellerName;
        private String sellerid;
        private List<ListBean> list;
        private boolean isChecked;

        public boolean getChecked()
        {
            return isChecked;
        }

        public void setChecked(boolean isChecked)
        {
            this.isChecked = isChecked;
        }

bean类2

public static class ListBean {
            /**
             * bargainPrice : 11800.0
             * createtime : 2017-10-10T17:33:37
             * detailUrl : https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends
             * images : https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg
             * num : 5
             * pid : 57
             * price : 5199.0
             * pscid : 40
             * selected : 1
             * sellerid : 1
             * subhead : 【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统
             * title : 小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银

             */

            private double bargainPrice;
            private String createtime;
            private String detailUrl;
            private String images;
            private int num;
            private int pid;
            private double price;
            private int pscid;
            private int selected;
            private int sellerid;
            private String subhead;
            private String title;
            private boolean innerChecked;

            public boolean getInnerChecked()
            {
                return innerChecked;
            }

            public void setInnerChecked(boolean innerChecked)
            {
                this.innerChecked = innerChecked;
            }

3.购物车底部布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rece_shop"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_gravity=""
        android:gravity="center_vertical"
        >

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="全选"
            android:id="@+id/check_all"
            />

       <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="总价是:¥"
           android:textSize="20sp"
           android:textColor="#f00"
           android:layout_marginLeft="80dp"
           android:layout_marginTop="10dp"
           android:id="@+id/text_zongjia"
           />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="去结算"
            android:textColor="#ffffff"
            android:background="#f00"
            android:textSize="20sp"
            android:id="@+id/btn_tijiao"
            android:layout_alignParentRight="true"
            />

    </RelativeLayout>

</LinearLayout>

4.购物车外部适配器

public class MyWaiAdapter extends BaseQuickAdapter<News4.DataBean,BaseViewHolder> {

    private int layoutPosition;
    private List<News4.DataBean.ListBean> listBeans;
    private MyShopingAdapter myShopingAdapter;


    public interface OnCheckedChangeLisenter {
        void onChecked(int layoutPosition, boolean isChecked);
    }

    public void setOnCheckedChangeLisenter(OnCheckedChangeLisenter onCheckedChangeLisenter) {
        this.onCheckedChangeLisenter = onCheckedChangeLisenter;
    }

    private RecyclerView rece_waishop;
    OnCheckedChangeLisenter onCheckedChangeLisenter;

    public MyWaiAdapter(int layoutResId, @Nullable List<News4.DataBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, News4.DataBean item) {

        //当前位置
        layoutPosition = helper.getLayoutPosition();

        //对外层的条目商家信息内容
        helper.setText(R.id.check_waishop,item.getSellerName());
        //对外层的勾选状态
        CheckBox check_waishop = helper.getView(R.id.check_waishop);
        //外层被点击之后及时通过接口回调的形式通知全选/反选按钮
        check_waishop.setOnCheckedChangeListener(null);
        check_waishop.setChecked(item.getChecked());
        check_waishop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean checked = check_waishop.isChecked();
                item.setChecked(checked);
                if(checked)
                {
                    for (int i = 0; i < item.getList().size(); i++) {
                        item.getList().get(i).setInnerChecked(true);
                    }
                }
                else
                {
                    for (int i = 0; i < item.getList().size(); i++) {
                        item.getList().get(i).setInnerChecked(false);
                    }
                }

            }
        });

        /*check_waishop.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    item.setChecked(isChecked);
                    if(isChecked)
                    {
                        for (int i = 0; i < item.getList().size(); i++) {
                            item.getList().get(i).setInnerChecked(true);
                        }
                    }
                    else
                    {
                        for (int i = 0; i < item.getList().size(); i++) {
                            item.getList().get(i).setInnerChecked(false);
                        }
                    }

                    onCheckedChangeLisenter.onChecked(helper.getLayoutPosition(),isChecked);
            }
        });*/
        //外层条目的适配器中需获取内层的RecyclerView
        rece_waishop = helper.getView(R.id.rece_waishop);
        //内层的数据源item.getList();
        listBeans = item.getList();
        //需要将数据源设置给适配器
        myShopingAdapter = new MyShopingAdapter(R.layout.shoping_layout, listBeans);
        LinearLayoutManager manager = new LinearLayoutManager(App.getInstance(), LinearLayoutManager.VERTICAL, false);
        rece_waishop.setLayoutManager(manager);
        rece_waishop.setAdapter(myShopingAdapter);
        myShopingAdapter.setOnCheckedChangeLisenter(new MyShopingAdapter.OnCheckedChangeLisenter() {
            @Override
            public void onChecked(int LayoutPosition, boolean isChecked) {
                boolean isAllInnerChecked = true;
                for (int i = 0; i < item.getList().size(); i++) {
                    boolean innerChecked = item.getList().get(i).getInnerChecked();
                    isAllInnerChecked = (isAllInnerChecked & innerChecked);
                }
                check_waishop.setChecked(isAllInnerChecked);
                //外层条目
                item.setChecked(isAllInnerChecked);
                //首先需要更改bean对象的状态,把具体的位置进行回传
                //然后通过接口回到通知调用者,状态发送改变,及时对全选/反选按钮做更新处理
                onCheckedChangeLisenter.onChecked(layoutPosition,isChecked);

            }
        });
    }
}

5.外部适配器布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_height="wrap_content">

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="商家1"
        android:id="@+id/check_waishop"
        />
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rece_waishop"
        />

</LinearLayout>
6.内部适配器

public class MyShopingAdapter extends BaseQuickAdapter<News4.DataBean.ListBean,BaseViewHolder> {

    private int shangpinnumber;


    public MyShopingAdapter(int layoutResId, @Nullable List<News4.DataBean.ListBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, News4.DataBean.ListBean item) {

        helper.setText(R.id.text_biaoti, item.getTitle());
        helper.setText(R.id.text_shopprice,"总价是:"+item.getPrice());
        SimpleDraweeView iv_showIcon = helper.getView(R.id.simp_viewshop);
        //根据|进行切割
        String images = item.getImages();
        String[] splitImages = images.split("\\|");
        //Fresco加载图片
        Uri uri = Uri.parse(splitImages[0]);
        iv_showIcon.setImageURI(uri);
        //从Bean对象去取出勾选状态
        Log.e("getInnerChecked", "item.getInnerChecked():" + item.getInnerChecked());
        helper.setChecked(R.id.check_shang, item.getInnerChecked());
        CheckBox  check_shang = helper.getView(R.id.check_shang);

        check_shang.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //内层的状态更改完
                item.setInnerChecked(check_shang.isChecked());
                //通过接口回调,把状态回显给外层
                onCheckedChangeLisenter.onChecked(helper.getLayoutPosition(),check_shang.isChecked());
            }
        });

        Jiajian jia_jiajian = helper.getView(R.id.jia_jiajian);
        jia_jiajian.setOnNumCallBack(new Jiajian.onNumCallBack() {
            @Override
            public void onShowNum(int number) {
                shangpinnumber = number;
                Toast.makeText(mContext, "number"+number, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void add() {

                item.setNum(item.getNum()+1);
                User user = new User();
                //todo eventbus发送粘性事件
                EventBus.getDefault().postSticky(user);

            }

            @Override
            public void minus() {

                item.setNum(item.getNum()-1);
                User user = new User();
                EventBus.getDefault().postSticky(user);
            }
        });
       // helper.setText(R.id.jia_jiajian,item.getNum()+"");
        Jiajian jiajianView = helper.getView(R.id.jia_jiajian);
        TextView text_number = jiajianView.findViewById(R.id.text_number);
        text_number.setText(item.getNum()+"");
    }

    public interface OnCheckedChangeLisenter {
        void onChecked(int layoutPosition, boolean isChecked);
    }

    public void setOnCheckedChangeLisenter(OnCheckedChangeLisenter onCheckedChangeLisenter) {
        this.onCheckedChangeLisenter = onCheckedChangeLisenter;
    }

    OnCheckedChangeLisenter onCheckedChangeLisenter;
}
7.内部适配器布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_height="70dp">

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/check_shang"
            />

        <com.facebook.drawee.view.SimpleDraweeView
            android:layout_width="70dp"
            android:layout_height="70dp"
            app:placeholderImage="@mipmap/ic_launcher"
            android:id="@+id/simp_viewshop"
            android:layout_marginLeft="40dp"
            />


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="展示数据"
            android:id="@+id/text_biaoti"
            android:layout_marginLeft="125dp"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="价格:"
            android:textColor="#f00"
            android:layout_marginLeft="125dp"
            android:layout_marginTop="45dp"
            android:id="@+id/text_shopprice"
            />

        <jingd.bwie.com.jdong.mvp.ui.Jiajian
            android:id="@+id/jia_jiajian"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_alignParentTop="true"
            android:layout_alignParentRight="true"
            android:layout_marginRight="13dp"
            android:layout_marginTop="22dp"
            android:gravity="center_vertical"
            />

</RelativeLayout>
7.加减器页面

public class Jiajian extends LinearLayout implements View.OnClickListener {
    private Button btn_jian;
    private Button btn_jia;
    private TextView text_number;

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

    public Jiajian(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    private void init(Context context) {
        LayoutInflater.from(context).inflate(R.layout.jiajian_layout,this);
        btn_jian = (Button)findViewById(R.id.btn_jian);
        btn_jia = (Button)findViewById(R.id.btn_jia);
        text_number = (TextView)findViewById(R.id.text_number);
        btn_jia.setOnClickListener(this);
        btn_jian.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        String s = text_number.getText().toString();
        int number = Integer.parseInt(s);
        switch (v.getId())
        {
            case R.id.btn_jia:
                number+=1;
                text_number.setText(String.valueOf(number));
                if(onNumCallBack!=null)
                {
                    onNumCallBack.add();
                }
                break;
            case R.id.btn_jian:
                if(number<1)
                {
                    Toast.makeText(getContext(), "最小不能小于1", Toast.LENGTH_SHORT).show();
                    return;
                }
                number-=1;
                text_number.setText(String.valueOf(number));
                onNumCallBack.onShowNum(number);
                if(onNumCallBack!=null)
                {
                    onNumCallBack.minus();
                }
                break;
        }
    }
    //接口回调
    public interface onNumCallBack{
        void onShowNum(int number);

        void add();

        void minus();
    }
    onNumCallBack onNumCallBack;

    public void setOnNumCallBack(onNumCallBack onNumCallBack){
        this.onNumCallBack=onNumCallBack;
    }

}
 

网址:淘宝购物 https://www.yuejiaxmz.com/news/view/526212

相关内容

淘宝好购物助手
淘宝购物助手下载
十大淘宝购物省钱法宝
淘宝购物攻略,淘宝购物攻略:从入门到精通,轻松成为网购达人!
淘宝网购物如何省钱
实用的淘宝购物技巧
淘宝购物省钱6大秘笈
淘宝购物如何才会省钱?
淘宝达人怎么挑品质好货?淘宝达人购物技巧
淘宝购物秘籍:轻松变身网购达人

随便看看