展示数据

ShopShow[

微笑

ShopActivity 

public class ShopActivity extends AppCompatActivity implements ShopView{


    private XRecyclerView xrecyclerview_01;
    private Shoppresnter shoppresnter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shop);
        //找我们的布局控件
        xrecyclerview_01 = (XRecyclerView) findViewById(R.id.xrecyclerview_01);
        shoppresnter = new Shoppresnter(this,this);
        shoppresnter.jsondata();


    }


    @Override
    public void showshopview(ShopBean shopBean) {


        //设置适配器
       ShopAdater shopAdater = new ShopAdater(ShopActivity.this, shopBean);
        xrecyclerview_01.setAdapter(shopAdater);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        xrecyclerview_01.setLayoutManager(linearLayoutManager);
        xrecyclerview_01.setPullRefreshEnabled(false);
        //接口回调监听事件
        shopAdater.setclick(new ShopAdater.Clicklistener() {
            @Override
            public void dianjiclick(View view, int position, String pid, String text_title, String text_price, String image) {
                //传值
                Intent intent = new Intent(ShopActivity.this, AddActivity.class);
                intent.putExtra("text_title", text_title);
                intent.putExtra("text_price", text_price);
                intent.putExtra("pid", pid);
                intent.putExtra("image", image);
                startActivity(intent);
            }
        });




    }


    //销毁
    @Override
    protected void onDestroy() {
        super.onDestroy();
        shoppresnter.death();
    }
}




微笑

ShopAdater 

public class ShopAdater extends RecyclerView.Adapter<ShopAdater.viewholder> {
    Context context;
    ShopBean shopBean;


    public ShopAdater(Context context, ShopBean shopBean) {
        this.context = context;
        this.shopBean = shopBean;
        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));
    }


    @Override
    public viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.shop_layout_01, null);
        return new viewholder(view);
    }


    @Override
    public void onBindViewHolder(viewholder holder, final int position) {


        final String[] image = shopBean.getData().get(position).getImages().split("\\|");
        ImageLoader.getInstance().displayImage(image[0], holder.image_01);
        holder.text_price.setText("¥:"+shopBean.getData().get(position).getPrice());
        holder.text_title.setText(shopBean.getData().get(position).getSubhead());


        //获取pid
        final String pid= shopBean.getData().get(position).getPid()+"";
        final String text_title=shopBean.getData().get(position).getSalenum()+"";
        final String text_price=shopBean.getData().get(position).getSubhead();


        //点击事件回调
        holder.image_01.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                clicklistener.dianjiclick(view,position,pid,text_price,text_title,image[0]);
            }
        });
    }


    @Override
    public int getItemCount() {
        return shopBean.getData() == null ? 0 : shopBean.getData().size();
    }


    class viewholder extends RecyclerView.ViewHolder {
        private ImageView image_01;
        private TextView text_title;
        private TextView text_price;


        public viewholder(View itemView) {
            super(itemView);
            image_01 = (ImageView) itemView.findViewById(R.id.image_01);
            text_title = (TextView) itemView.findViewById(R.id.text_title);
            text_price = (TextView) itemView.findViewById(R.id.text_price);
        }
    }


    Clicklistener clicklistener;


    public void setclick(Clicklistener clicklistener) {
        this.clicklistener = clicklistener;


    }


    public interface Clicklistener {
        public void dianjiclick(View view,int position,String pid,String text_title,String text_price,String image);
    }
}


微笑

ShopMmodel 

public class ShopMmodel implements Shopmodel {
    @Override
    public void getshopdta(Callback callback) {
        OkHttp3Utils.doGet("http://120.27.23.105/product/searchProducts?keywords=%E6%89%8B%E6%9C%BA&page=1&source=android",callback);


    }
}


微笑

Shopmodel 

public interface Shopmodel {
    public void getshopdta(Callback callback);
}


微笑

Shoppresnter 

public class Shoppresnter {
    Context context;
    ShopView shopView;
    ShopMmodel shopMmodel;


    public Shoppresnter(Context context, ShopView shopView) {
        this.context = context;
        this.shopView = shopView;
        shopMmodel = new ShopMmodel();
    }


    public void jsondata() {
        shopMmodel.getshopdta(new OnUiCallback() {
            @Override
            public void onFailed(Call call, IOException e) {


            }


            @Override
            public void onSuccess(String result) {
                Gson gson = new Gson();
                ShopBean shopBean = gson.fromJson(result, ShopBean.class);
                shopView.showshopview(shopBean);
            }
        });


    }


    //解绑的操作
    public  void  death(){
        shopView=null;
    }
}


微笑

ShopView 

public interface ShopView {
    public void  showshopview(ShopBean shopBean);
}

]


传值加入购物车

微笑

AddActivity 

public class AddActivity extends AppCompatActivity implements Addview, View.OnClickListener {
    private ImageView image_add_view;
    private TextView text_add_title;
    private TextView text_add_price;
    private String pid;
    private Button btn_add;
    private Button btn_buy;
    private Addpresenter addpresenter;
    private VideoView videoView;
    //是使用handler发送延迟的消息
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0) {
                Toast.makeText(AddActivity.this, "正在缓冲中。。。。", Toast.LENGTH_SHORT).show();
            }
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        //找我们的布局控件
        image_add_view = (ImageView) findViewById(R.id.image_add_view);
        text_add_title = (TextView) findViewById(R.id.text_add_title);
        //找我们的布局控件
        text_add_price = (TextView) findViewById(R.id.text_add_price);
        btn_add = (Button) findViewById(R.id.btn_add);
        //找我们的布局控件
        btn_add.setOnClickListener(this);
        btn_buy = (Button) findViewById(R.id.btn_buy);
        btn_buy.setOnClickListener(this);
        //接收数据
        Intent intent = getIntent();
        String name = intent.getStringExtra("text_title");
        String price = intent.getStringExtra("text_price");
        pid = intent.getStringExtra("pid");
        String image = intent.getStringExtra("image");




        //设置数据
        text_add_title.setText(name);
        text_add_price.setText("$:" + price);
        //设置图片
        Glide.with(AddActivity.this).load(image).into(image_add_view);
//----------播放视频-----------------------------------------------------------
        //控件
        videoView = (VideoView) this.findViewById(R.id.videoView);
        String videoUrl2 = Utils.videoUrl;
        //转换
        Uri uri = Uri.parse(videoUrl2);
        //设置视频控制器
        videoView.setMediaController(new MediaController(this));
        //播放完成回调
        videoView.setOnCompletionListener(new MyPlayerOnCompletionListener());
        //设置视频路径
        videoView.setVideoURI(uri);
        if (videoView != null) {
            handler.sendEmptyMessageDelayed(0, 2000);
            // Toast.makeText(AddActivity.this, "正在缓冲中。。。。", Toast.LENGTH_SHORT).show();
        }
        //开始播放视频
        videoView.start();
    }


    class MyPlayerOnCompletionListener implements MediaPlayer.OnCompletionListener {
        @Override
        public void onCompletion(MediaPlayer mp) {
            Toast.makeText(AddActivity.this, "播放完成了", Toast.LENGTH_SHORT).show();
        }
    }




    @Override
    public void showaddview(AddBean addBean) {
        //跳转购物车页面
        Toast.makeText(this, addBean.getMsg(), Toast.LENGTH_SHORT).show();
        if (addBean.getMsg().equals("加购成功")) {
            startActivity(new Intent(AddActivity.this, CartShopActivity.class));
        }


    }


    @Override
    public void onClick(View view) {//点击事件
        switch (view.getId()) {
            case R.id.btn_add:
                //点击加入购物车
                addpresenter = new Addpresenter(this, this);
                addpresenter.jsondata(pid);
                break;
            case R.id.btn_buy:
                Toast.makeText(this, "购买成功", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }


    //视频的网址
    public class Utils {
        public static final String videoUrl = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4";


    }
    //解绑的操作
    @Override
    protected void onDestroy() {
        super.onDestroy();
        addpresenter.death();
    }
}


微笑

AddMmodel 

public class AddMmodel implements  Addmodel {
    @Override
    public void getadddata(String pid, Callback callback) {
        OkHttp3Utils.doGet("https://www.zhaoapi.cn/product/addCart?pid="+pid+"&uid=3831&token=DED1DEF0B7287F1575BD92B817A6C742&source=android",callback);
    }
}


微笑

Addmodel 

public interface Addmodel {
    public void getadddata(String pid, Callback callback);
}


微笑

Addpresenter 

public class Addpresenter {
    Context context;
    Addview addview;
    AddMmodel addMmodel;


    public Addpresenter(Context context, Addview addview) {
        this.context = context;
        this.addview = addview;
        addMmodel = new AddMmodel();
    }


    public void jsondata(String pid) {
        addMmodel.getadddata(pid,new OnUiCallback() {
            @Override
            public void onFailed(Call call, IOException e) {


            }


            @Override
            public void onSuccess(String result) {
                Gson gson = new Gson();
                AddBean addBean = gson.fromJson(result, AddBean.class);
                addview.showaddview(addBean);
            }
        });


    }


    //解绑的操作
    public  void  death(){
      addview=null;
    }
}


微笑

Addview 

public interface Addview {
    public void showaddview(AddBean addBean);
}

微笑

CustomVideoView

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


    public CustomVideoView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //我们重新计算高度
        int width = getDefaultSize(0, widthMeasureSpec);
        int height = getDefaultSize(0, heightMeasureSpec);
        setMeasuredDimension(width, height);
    }


    @Override
    public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
        super.setOnPreparedListener(l);
    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        return super.onKeyDown(keyCode, event);
    }
}


购物车

微笑

CartShopActivity 

public class CartShopActivity extends AppCompatActivity implements ViewCallBack {
    private RecyclerView recyclerView;
    private TextView total_price;
    private TextView total_num;
    private CheckBox quanxuan;
    private MyPresenter myPresenter;
    private RecyAdapter recyAdapter;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart_shop);
        //找我们的布局控件
        recyclerView = (RecyclerView) findViewById(R.id.recycler_View);
        total_price = (TextView) findViewById(R.id.total_price);
        total_num = (TextView) findViewById(R.id.total_num);
        quanxuan = (CheckBox) findViewById(R.id.quanxuan);
        quanxuan.setTag(1);


        LinearLayoutManager manager = new LinearLayoutManager(CartShopActivity.this);
        //适配器
        recyAdapter = new RecyAdapter(this);
        myPresenter = new MyPresenter(this);
        myPresenter.getData();


        recyclerView.setLayoutManager(manager);
        recyclerView.setAdapter(recyAdapter);
        //调用recyAdapter里面的接口,设置 全选按钮 总价 总数量
        recyAdapter.setUpdateListener(new RecyAdapter.UpdateListener() {
            @Override
            public void setTotal(String total, String num, boolean allCheck) {
                total_num.setText("共" + num + "件商品");//总数量
                total_price.setText("合计 :¥" + total );//总价
                if (allCheck) {
                    quanxuan.setTag(2);
                    quanxuan.setBackgroundResource(R.drawable.shopcart_selected);
                } else {
                    quanxuan.setTag(1);
                    quanxuan.setBackgroundResource(R.drawable.shopcart_unselected);
                }
                quanxuan.setChecked(allCheck);
            }
        });


        //这里只做ui更改, 点击全选按钮,,调到adapter里面操作
        quanxuan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //调用adapter里面的方法 ,,把当前quanxuan状态传递过去


                int tag = (int) quanxuan.getTag();
                if (tag == 1) {
                    quanxuan.setTag(2);
                    quanxuan.setBackgroundResource(R.drawable.shopcart_selected);
                } else {
                    quanxuan.setTag(1);
                    quanxuan.setBackgroundResource(R.drawable.shopcart_unselected);
                }


                recyAdapter.quanXuan(quanxuan.isChecked());
            }
        });


    }




    //实现接口,重写的方法
    @Override
    public void success(CartBean cartBean) {
        //拿到返回来的数据 ,, 传给适配器数据
        recyAdapter.add(cartBean);
    }


    @Override
    public void failure(final Exception e) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(CartShopActivity.this, "error", Toast.LENGTH_SHORT).show();
            }
        });
    }


    //解绑的操作
    @Override
    protected void onDestroy() {
        super.onDestroy();
        myPresenter.detach();
    }
}

微笑

ModelCallBack 

public interface ModelCallBack {
    public void success(CartBean cartBean);
    public void failure(Exception e);
}

微笑

MyModel 

public class MyModel {
    public void getData(final ModelCallBack modelCallBack){
        String path = "https://www.zhaoapi.cn/product/getCarts?uid=3831&token=DED1DEF0B7287F1575BD92B817A6C742&source=android";
        OkhttpUtils.getInstance().asy(null, path, new AbstractUiCallBack<CartBean>() {
            @Override
            public void success(CartBean cartBean) {
                modelCallBack.success(cartBean);
            }


            @Override
            public void fail(Exception e) {
                modelCallBack.failure(e);
            }
        });


}
}

微笑

MyPresenter 

public class MyPresenter {


    MyModel myModel = new MyModel();
    ViewCallBack viewCallBack;


    public MyPresenter(ViewCallBack viewCallBack) {
        this.viewCallBack = viewCallBack;
    }




    public void getData() {
        myModel.getData(new ModelCallBack() {
            @Override
            public void success(CartBean cartBean) {
                if (viewCallBack != null) {
                    viewCallBack.success(cartBean);
                }
            }


            @Override
            public void failure(Exception e) {
                if (viewCallBack != null) {
                    viewCallBack.failure(e);
                }
            }
        });
    }


    /**
     * 防止内存泄露
     */
    public void detach() {
        viewCallBack = null;
    }
}

微笑

RecyAdapter 

public class RecyAdapter extends RecyclerView.Adapter<RecyAdapter.MyViewHolder> {


    Context context;
    private List<CartBean.DataBean.ListBean> list;
    private Map<String, String> map = new HashMap<>();


    public RecyAdapter(Context context) {
        this.context = context;
        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));
    }


    /**
     * 添加数据
     */
    public void add(CartBean cartBean) {


        if (list == null) {
            list = new ArrayList<>();
        }
        for (CartBean.DataBean shop : cartBean.getData()) {
            map.put(shop.getSellerid(), shop.getSellerName());
            for (int i = 0; i < shop.getList().size(); i++) {
                //添加到list集合里
                list.add(shop.getList().get(i));
            }
        }


        setFirst(list);
        notifyDataSetChanged();
    }


    /**
     * 设置数据源
     */
    private void setFirst(List<CartBean.DataBean.ListBean> list) {


        if (list.size() > 0) {
            list.get(0).setIsFirst(1);
            for (int i = 1; i < list.size(); i++) {
                if (list.get(i).getSellerid() == list.get(i - 1).getSellerid()) {
                    list.get(i).setIsFirst(2);
                } else {
                    list.get(i).setIsFirst(1);


                    if (list.get(i).isItem_check() == true) {
                        list.get(i).setShop_check(list.get(i).isItem_check());
                    }
                }
            }
        }
    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.recy_cart_item, null);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }


    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {


        /**
         * 设置商铺显示或隐藏
         * */
        if (list.get(position).getIsFirst() == 1) {
            holder.shop_checkbox.setVisibility(View.VISIBLE);
            holder.shop_name.setVisibility(View.VISIBLE);
            holder.shop_checkbox.setChecked(list.get(position).isShop_check());
            holder.shop_name.setText(map.get(String.valueOf(list.get(position).getSellerid())));
        } else {
            holder.shop_name.setVisibility(View.GONE);
            holder.shop_checkbox.setVisibility(View.GONE);
        }
        String[] split = list.get(position).getImages().split("\\|");


        ImageLoader.getInstance().displayImage(split[0], holder.item_face);
        holder.item_checkbox.setChecked(list.get(position).isItem_check());
        holder.item_name.setText(list.get(position).getTitle());
        holder.item_price.setText(list.get(position).getPrice() + "");
        //调用customjiajian里面的方法设置 加减号中间的数字
        holder.customJiaJian.setEditText(list.get(position).getNum());


        //商铺的shop_checkbox点击事件 ,控制商品的item_checkbox
        holder.shop_checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                list.get(position).setShop_check(holder.shop_checkbox.isChecked());


                for (int i = 0; i < list.size(); i++) {
                    if (list.get(position).getSellerid() == list.get(i).getSellerid()) {
                        //当前条目的选中状态 设置成 当前商铺的选中状态
                        list.get(i).setItem_check(holder.shop_checkbox.isChecked());
                    }
                }


                notifyDataSetChanged();
                sum(list);
            }
        });




        holder.item_checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                list.get(position).setItem_check(holder.item_checkbox.isChecked());
                for (int i = 0; i < list.size(); i++) {
                    for (int j = 0; j < list.size(); j++) {
                        if (list.get(i).getSellerid() == list.get(j).getSellerid() && !list.get(j).isItem_check()) {
                            list.get(i).setShop_check(false);
                            break;
                        } else {
                            list.get(i).setShop_check(true);
                        }
                    }
                }


                notifyDataSetChanged();
                sum(list);
            }
        });




        holder.item_delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                list.remove(position);


                setFirst(list);




                sum(list);
                notifyDataSetChanged();
            }
        });




        holder.customJiaJian.setCustomListener(new CustomJiaJian.CustomListener() {
            @Override
            public void jiajian(int count) {


                list.get(position).setNum(count);
                notifyDataSetChanged();
                sum(list);
            }


            @Override
            //输入值 求总价
            public void shuRuZhi(int count) {
                list.get(position).setNum(count);
                notifyDataSetChanged();
                sum(list);
            }
        });
    }


    /**
     * 计算总价的方法
     */
    private void sum(List<CartBean.DataBean.ListBean> list) {
        int totalNum = 0;
        float totalMoney = 0.0f;
        boolean allCheck = true;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).isItem_check()) {
                totalNum += list.get(i).getNum();
                totalMoney += list.get(i).getNum() * list.get(i).getPrice();
            } else {


                allCheck = false;
            }
        }


        updateListener.setTotal(totalMoney + "", totalNum + "", allCheck);
    }


    public void quanXuan(boolean checked) {
        for (int i = 0; i < list.size(); i++) {
            list.get(i).setShop_check(checked);
            list.get(i).setItem_check(checked);


        }
        notifyDataSetChanged();
        sum(list);
    }


    @Override
    public int getItemCount() {
        return list == null ? 0 : list.size();
    }




    public static class MyViewHolder extends RecyclerView.ViewHolder {


        private final CheckBox shop_checkbox;
        private final TextView shop_name;
        private final CheckBox item_checkbox;
        private final TextView item_name;
        private final TextView item_price;
        private final CustomJiaJian customJiaJian;
        private final ImageView item_delete;
        private final ImageView item_face;


        public MyViewHolder(View itemView) {
            super(itemView);
            shop_checkbox = (CheckBox) itemView.findViewById(R.id.shop_checkbox);
            shop_name = (TextView) itemView.findViewById(R.id.shop_name);
            item_checkbox = (CheckBox) itemView.findViewById(R.id.item_checkbox);
            item_name = (TextView) itemView.findViewById(R.id.item_name);
            item_price = (TextView) itemView.findViewById(R.id.item_price);
            customJiaJian = (CustomJiaJian) itemView.findViewById(R.id.custom_jiajian);
            item_delete = (ImageView) itemView.findViewById(R.id.item_delete);
            item_face = (ImageView) itemView.findViewById(R.id.item_face);
        }
    }


    UpdateListener updateListener;


    public void setUpdateListener(UpdateListener updateListener) {
        this.updateListener = updateListener;
    }


    //接口
    public interface UpdateListener {
        public void setTotal(String total, String num, boolean allCheck);
    }
}

微笑

ViewCallBack 

public interface ViewCallBack {
    public void success(CartBean cartBean);
    public void failure(Exception e);
}


(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 密” 歌单,支持 “批量添歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值