京东分类页面③

本文介绍了一个简单的商品详情页展示方案,包括图片轮播、价格展示等功能,并实现了将商品添加到购物车的功能。同时,还提供了分享商品链接到社交平台的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ListDetailsActivity

package com.example.a1512qjd.ui.activity;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.StrikethroughSpan;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.a1512qjd.R;
import com.example.a1512qjd.bean.ProductsBean;
import com.example.a1512qjd.presenter.AddCartPresenterImp;
import com.example.a1512qjd.ui.inter.AddCartView;
import com.example.a1512qjd.utils.GlideImageLoader;
import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMWeb;
import com.youth.banner.Banner;

import java.util.Arrays;

public class ListDetailsActivity extends AppCompatActivity implements View.OnClickListener, AddCartView {

    private Banner mBanner;
    private TextView mTvTitle;
    private TextView mTvPrice;
    private TextView mTvVipPrice;
    private ProductsBean.DataBean bean;
    private ImageView mIvShare;
    /**
     * 购物车
     */
    private TextView mTvShopCard;
    /**
     * 加入购物车
     */
    private TextView mTvAddCard;
    private AddCartPresenterImp addCartPresenterImp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_details);

        //获取JavaBean
        Intent intent = getIntent();
        bean = (ProductsBean.DataBean) intent.getSerializableExtra("bean");
        initView();
        //设置值
        setData();

        //绑定
        addCartPresenterImp = new AddCartPresenterImp(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        addCartPresenterImp.detach();
    }

    @Override
    public void onStop() {
        super.onStop();
        //结束轮播
        mBanner.stopAutoPlay();
    }

    /**
     * 设置值
     */
    private void setData() {
        if (bean == null) {
            return;
        }
        //设置图片加载器
        mBanner.setImageLoader(new GlideImageLoader());
        String[] imgs = bean.getImages().split("\\|");
        //设置图片集合
        mBanner.setImages(Arrays.asList(imgs));
        //banner设置方法全部调用完毕时最后调用
        mBanner.start();

        mTvTitle.setText(bean.getTitle());
        //给原价加横线
        SpannableString spannableString = new SpannableString("原价:" + bean.getSalenum());
        StrikethroughSpan strikethroughSpan = new StrikethroughSpan();
        spannableString.setSpan(strikethroughSpan, 0, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        mTvPrice.setText(spannableString);


        mTvVipPrice.setText("现价:" + bean.getPrice());
    }

    private void initView() {
        mBanner = (Banner) findViewById(R.id.banner);
        mTvTitle = (TextView) findViewById(R.id.tvTitle);
        mTvPrice = (TextView) findViewById(R.id.tvPrice);
        mTvVipPrice = (TextView) findViewById(R.id.tvVipPrice);
        mIvShare = (ImageView) findViewById(R.id.ivShare);
        mIvShare.setOnClickListener(this);
        mTvShopCard = (TextView) findViewById(R.id.tvShopCard);
        mTvShopCard.setOnClickListener(this);
        mTvAddCard = (TextView) findViewById(R.id.tvAddCard);
        mTvAddCard.setOnClickListener(this);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.ivShare:

                //分享
                UMWeb umWeb = new UMWeb(bean.getDetailUrl());
                new ShareAction(ListDetailsActivity.this).withMedia(umWeb).setDisplayList(SHARE_MEDIA.SINA,
                        SHARE_MEDIA.QQ,
                        SHARE_MEDIA.WEIXIN)
                        .setCallback(shareListener).open();
                break;

            case R.id.tvShopCard:
                //跳转到购物车
                Intent intent = new Intent(ListDetailsActivity.this, ShopCartActivity.class);
                startActivity(intent);
                break;
            case R.id.tvAddCard:
                addCard();
                break;
        }
    }

    private void addCard() {
        //判断用户是否登录
        //判断的逻辑是,从SharedPreferences里取uid,如果能取到说明已经登录过,否则跳转到登录页面
        SharedPreferences sharedPreferences = getSharedPreferences("user", Context.MODE_PRIVATE);
        String uid = sharedPreferences.getString("uid", "-1");
        if ("-1".equals(uid)) {
            //跳转到登录页面
            Intent intent = new Intent(ListDetailsActivity.this, LoginActivity.class);
            startActivity(intent);
        } else {
            //添加购物车
            String token = sharedPreferences.getString("token", "");
            addCartPresenterImp.addCart(uid, bean.getPid() + "", token);

        }
    }

    private UMShareListener shareListener = new UMShareListener() {
        /**
         * @descrption 分享开始的回调
         * @param platform 平台类型
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {
        }

        /**
         * @descrption 分享成功的回调
         * @param platform 平台类型
         */
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Toast.makeText(ListDetailsActivity.this, "成功                                        了", Toast
                    .LENGTH_LONG).show();
        }

        /**
         * @descrption 分享失败的回调
         * @param platform 平台类型
         * @param t 错误原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Toast.makeText(ListDetailsActivity.this, "失                                            败" + t.getMessage
                    (), Toast.LENGTH_LONG).show();
        }

        /**
         * @descrption 分享取消的回调
         * @param platform 平台类型
         */
        @Override
        public void onCancel(SHARE_MEDIA platform) {
            Toast.makeText(ListDetailsActivity.this, "取消                                          了", Toast
                    .LENGTH_LONG).show();
        }
    };

    @Override
    public void showMsg(String msg) {
        Toast.makeText(ListDetailsActivity.this, msg, Toast.LENGTH_SHORT).show();
    }

}

activity_list_details.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ui.activity.ListDetailsActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#33000000">

        <ImageView
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="15dp"
            android:background="@drawable/leftjiantou"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="商品详情"/>

        <ImageView
            android:id="@+id/ivShare"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="15dp"
            android:background="@drawable/share"/>
    </RelativeLayout>

    <com.youth.banner.Banner
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="200dp"></com.youth.banner.Banner>

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/tvPrice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/tvVipPrice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ff0000"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"></View>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tvShopCard"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="购物车"/>

        <TextView
            android:id="@+id/tvAddCard"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#ff0000"
            android:gravity="center"
            android:text="加入购物车"/>
    </LinearLayout>

</LinearLayout>

AddCartModel

package com.example.a1512qjd.model.inter;

import com.example.a1512qjd.net.OnNetListener;

public interface AddCartModel {
    void addCart(String uid, String pid, String token, OnNetListener onNetListener);
}

AddCartModelImp

package com.example.a1512qjd.model;

import com.example.a1512qjd.bean.BaseBean;
import com.example.a1512qjd.model.inter.AddCartModel;
import com.example.a1512qjd.net.Api;
import com.example.a1512qjd.net.OkhttpUtils;
import com.example.a1512qjd.net.OnNetListener;
import com.google.gson.Gson;

import java.util.HashMap;
import java.util.Map;

public class AddCartModelImp implements AddCartModel {
    @Override
    public void addCart(String uid, String pid, String token, final OnNetListener onNetListener) {
        Map<String, String> params = new HashMap<>();
        params.put("Uid", uid);
        params.put("Pid", pid);
        params.put("Token", token);
        OkhttpUtils.getInstance().doPost(Api.ADDCART_RUL, params, new OnNetListener() {
            @Override
            public void onSuccess(String result) {
                BaseBean baseBean = new Gson().fromJson(result, BaseBean.class);
                if ("0".equals(baseBean.getCode())) {
                    onNetListener.onSuccess(result);
                }

            }

            @Override
            public void onFailed(Exception e) {
                onNetListener.onFailed(e);
            }
        });
    }

}

AddCartView

package com.example.a1512qjd.ui.inter;

public interface AddCartView {
    void showMsg(String msg);

}

AddCartPresenter

package com.example.a1512qjd.presenter.inter;

public interface AddCartPresenter {
    void addCart(String uid, String pid, String token);

}

AddCartPresenterImp

package com.example.a1512qjd.presenter;

import com.example.a1512qjd.bean.BaseBean;
import com.example.a1512qjd.model.AddCartModelImp;
import com.example.a1512qjd.net.OnNetListener;
import com.example.a1512qjd.presenter.inter.AddCartPresenter;
import com.example.a1512qjd.ui.inter.AddCartView;
import com.google.gson.Gson;

public class AddCartPresenterImp implements AddCartPresenter {
    private AddCartView addCartView;
    private final AddCartModelImp addCartModelImp;

    public AddCartPresenterImp(AddCartView addCartView) {
        this.addCartView = addCartView;
        addCartModelImp = new AddCartModelImp();
    }

    @Override
    public void addCart(String uid, String pid, String token) {
        addCartModelImp.addCart(uid, pid, token, new OnNetListener() {
            @Override
            public void onSuccess(String result) {
                if (addCartView != null) {
                    BaseBean baseBean = new Gson().fromJson(result, BaseBean.class);
                    addCartView.showMsg(baseBean.getMsg());
                }
            }

            @Override
            public void onFailed(Exception e) {

            }
        });
    }

    public void detach() {
        if (addCartView != null) {
            addCartView = null;
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值