前边有界面滑动和底部导航栏,这个比较简单就不做了。
界面用到的图标在网上找吧,这里我就不发了。
主界面布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.bw.movie.diyview.MyScrollView
android:id="@+id/index_sv"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.youth.banner.Banner
android:id="@+id/index_banner"
android:layout_width="match_parent"
android:layout_height="200dp"></com.youth.banner.Banner>
<android.support.v7.widget.RecyclerView
android:id="@+id/index_jgg"
android:layout_width="match_parent"
android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="60dp"
android:layout_height="20dp"
android:src="@drawable/kaui" />
<ViewFlipper
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:autoStart="true"
android:flipInterval="3000"
android:inAnimation="@anim/anim_in"
android:outAnimation="@anim/anim_out">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="hot vivo X20 带你开启全面屏时代!逆光也清晰,照亮你的美!"
android:textSize="12dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="推荐 【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机"
android:textSize="12dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="热门 Super AMOLED三星双曲面2K 屏,支持无线充电!"
android:textSize="12dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="最新 升级4G大显存!Nvme协议Pcie SSD,速度快人一步】GTX1050Ti就选拯救者!"
android:textSize="12dp" />
</ViewFlipper>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="60dp"
android:layout_height="20dp"
android:src="@drawable/miaos" />
<TextView
android:text="00点场"
android:id="@+id/index_even"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp" />
<TextView
android:layout_marginLeft="15dp"
android:id="@+id/index_hour"
android:text="00"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:text=":"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/index_minute"
android:text="00"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:text=":"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/index_second"
android:text="00"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/tuijian" />
<android.support.v7.widget.RecyclerView
android:id="@+id/index_tuijian"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>
</com.bw.movie.diyview.MyScrollView>
<include layout="@layout/mysearch"></include>
</RelativeLayout>
标题布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@color/white"
android:id="@+id/sousuokuang"
android:layout_height="50dp"
android:orientation="horizontal"
android:gravity="center_vertical"
>
<TextView
android:id="@+id/mysearch_sao"
android:gravity="center"
android:text="扫一扫"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="2"
/>
<RelativeLayout
android:id="@+id/mysearch_rl"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="6"
android:background="@drawable/suosuo">
<ImageView
android:layout_marginTop="3dp"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:src="@drawable/a_4" />
<ImageView
android:layout_marginTop="3dp"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:src="@drawable/root" />
</RelativeLayout>
<TextView
android:id="@+id/mysearch_info"
android:gravity="center"
android:text="消息"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="2"
/>
</LinearLayout>
主界面代码 IndexFragment
public class IndexFragment extends Fragment implements IndexView {
@BindView(R.id.index_banner)
Banner indexBanner;
Unbinder unbinder;
@BindView(R.id.index_jgg)
RecyclerView indexJgg;
@BindView(R.id.index_tuijian)
RecyclerView indexTuijian;
@BindView(R.id.sousuokuang)
LinearLayout sousuokuang;
@BindView(R.id.index_sv)
MyScrollView indexSv;
@BindView(R.id.mysearch_sao)
TextView mysearchSao;
@BindView(R.id.mysearch_rl)
RelativeLayout mysearchRl;
@BindView(R.id.mysearch_info)
TextView mysearchInfo;
@BindView(R.id.index_even)
TextView indexEven;
@BindView(R.id.index_hour)
TextView indexHour;
@BindView(R.id.index_minute)
TextView indexMinute;
@BindView(R.id.index_second)
TextView indexSecond;
private IndexPresenter presenter;
private List<Ad.DataBean> data;
private List<Ad.TuijianBean.ListBean> tuijian;
private CompositeDisposable compositeDisposable = new CompositeDisposable();
private final int REQUEST_CODE = 200;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getActivity(), R.layout.index_fg, null);
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
presenter = new IndexPresenter(this);
//初始化首页数据
initData();
sousuokuang.getBackground().setAlpha(0);
indexSv.setOnScrollChanged(new MyScrollView.OnScrollChanged() {
@Override
public void onScrollChanged(int x, int y, int oldx, int oldy) {
// Log.d("aaa", x + "," + y + "=====" + oldx + "," + oldy);
if (y < 270) {
int i = (int) ((float) y / (float) 270 * 255);
sousuokuang.getBackground().setAlpha(i);
} else {
sousuokuang.getBackground().setAlpha(255);
}
}
});
}
private void initData() {
initMiaosha();
indexJgg.setLayoutManager(new GridLayoutManager(getActivity(), 2, LinearLayoutManager.HORIZONTAL, false));
indexTuijian.setLayoutManager(new GridLayoutManager(getActivity(), 2));
//关闭嵌套滑动
indexTuijian.setNestedScrollingEnabled(false);
//固定recyclerview尺寸
indexTuijian.setHasFixedSize(true);
presenter.getAd();
presenter.getCatagory();
}
private void initMiaosha() {
Observable.interval(1, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(Long aLong) {
upDateMiaosha();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void upDateMiaosha() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date curDate = new Date(System.currentTimeMillis());
String format = df.format(curDate);
StringBuffer buffer = new StringBuffer();
String substring = format.substring(0, 11);
buffer.append(substring);
Log.d("ccc", substring);
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if (hour % 2 == 0) {
indexEven.setText(hour + "点场");
buffer.append((hour + 2));
buffer.append(":00:00");
} else {
indexEven.setText((hour - 1) + "点场");
buffer.append((hour + 1));
buffer.append(":00:00");
}
String totime = buffer.toString();
try {
Date date = df.parse(totime);
Date date1 = df.parse(format);
long defferenttime = date.getTime() - date1.getTime();
long days = defferenttime / (1000 * 60 * 60 * 24);
long hours = (defferenttime - days * (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
long minute = (defferenttime - days * (1000 * 60 * 60 * 24) - hours * (1000 * 60 * 60)) / (1000 * 60);
long seconds = defferenttime % 60000;
long second = Math.round((float) seconds / 1000);
indexHour.setText("0" + hours + "");
if (minute >= 10) {
indexMinute.setText(minute + "");
} else {
indexMinute.setText("0" + minute + "");
}
if (second >= 10) {
indexSecond.setText(second + "");
} else {
indexSecond.setText("0" + second + "");
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void initBanner() {
// List<String> title = new ArrayList<>();
List<String> path = new ArrayList<>();
for (Ad.DataBean bean : data) {
path.add(bean.getIcon());
}
indexBanner.setImages(path)
.isAutoPlay(true)
.setImageLoader(new MyLoader())
.start();
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
presenter.onDestroy();
presenter = null;
}
@Override
public void onSuccess(Ad ad) {
data = ad.getData();
tuijian = ad.getTuijian().getList();
//初始化banner
initBanner();
//初始化推荐列表
initTuijian();
}
private void initTuijian() {
TuiJianAdapter adapter = new TuiJianAdapter(tuijian);
indexTuijian.setAdapter(adapter);
}
@Override
public void onCatagorySuccess(Catagory catagory) {
List<Catagory.DataBean> data = catagory.getData();
//初始化九宫格
JggAdapter adapter = new JggAdapter(data);
indexJgg.setAdapter(adapter);
}
@OnClick({R.id.mysearch_sao, R.id.mysearch_rl, R.id.mysearch_info})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.mysearch_sao:
Intent intent = new Intent(getContext(), CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
break;
case R.id.mysearch_rl:
startActivity(new Intent(getContext(), QueryActivity.class));
break;
case R.id.mysearch_info:
break;
}
}
@Override
public void onDestroy() {
super.onDestroy();
presenter = null;
compositeDisposable.clear();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
//处理扫描结果(在界面上显示)
if (null != data) {
Bundle bundle = data.getExtras();
if (bundle == null) {
return;
}
if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
String result = bundle.getString(CodeUtils.RESULT_STRING);
Toast.makeText(getContext(), "解析结果:" + result, Toast.LENGTH_LONG).show();
} else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
Toast.makeText(getContext(), "解析二维码失败", Toast.LENGTH_LONG).show();
}
}
}
}
}
主界面的自定义控件 MyScollerView
public class MyScrollView extends ScrollView {
public MyScrollView(Context context) {
this(context,null,0);
}
public MyScrollView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (onScrollChanged!=null){
onScrollChanged.onScrollChanged(l, t, oldl, oldt);
}
}
public interface OnScrollChanged{
void onScrollChanged(int x, int y, int oldx, int oldy);
}
private OnScrollChanged onScrollChanged;
public void setOnScrollChanged(OnScrollChanged onScrollChanged) {
this.onScrollChanged = onScrollChanged;
}
}
请求头 Constant
public class Constant {
public static final String BASE_URL = "https://www.zhaoapi.cn/";
}
接口 Retrofit
public interface MyRetrofit {
//九宫格|分类
@GET("product/getCatagory")
Observable<Catagory> getCatagory();
//子分类
@GET("product/getProductCatagory")
Observable<ProductCatagory> getProductCatagory(@Query("cid") String cid);
//商品列表
@GET("product/getProducts")
Observable<Products> getProducts(@Query("pscid") String pscid);
//首页
@GET("ad/getAd")
Observable<Ad> getAd();
//商品详情
@GET("product/getProductDetail")
Observable<Detail> getDetail(@Query("pid") String pid);
//登录
@FormUrlEncoded
@POST("user/login")
Observable<Login> getLogin(@Field("mobile") String mobile, @Field("password") String password);
//注册
@FormUrlEncoded
@POST("user/reg")
Observable<Register> getRegister(@Field("mobile") String mobile, @Field("password") String password);
//修改昵称
@FormUrlEncoded
@POST("user/updateNickName")
Observable<UpDateNc> getUpDateNc(@Field("uid") String uid, @Field("nickname") String nickname);
//上传头像
@Multipart
@POST("file/upload")
Observable<UpLoadIcon> upLoadIcon(@Query("uid") String uid, @Part MultipartBody.Part part);
//查询购物车
@FormUrlEncoded
@POST("product/getCarts")
Observable<Cart> getCart(@Field("uid") String uid);
//加入购物车
@FormUrlEncoded
@POST("product/addCart")
Observable<AddCart> getAddCart(@Field("uid") String uid, @Query("pid") String pid);
//更新购物车数量
@FormUrlEncoded
@POST("product/updateCarts")
Observable<UpdateCart> getUpdateCart(@Field("uid") String uid, @Field("sellerid") String sellerid, @Field("pid") String pid, @Field("selected") String selected, @Field("num") String num);
//删除购物车商品
@FormUrlEncoded
@POST("product/deleteCart")
Observable<DeleteCart> deleteCart(@Field("uid") int uid, @Field("pid") int pid);
//搜索商品
@GET("product/searchProducts")
Observable<QueryGoods> getQueryGoods(@Query("keywords") String keywords);
//创建订单
@FormUrlEncoded
@POST("product/createOrder")
Observable<CreateOrder> getCreateOrder(@Field("uid") String uid, @Field("price") String price);
//获得订单列表
@GET("product/getOrders")
Observable<OrderList> getOrderList(@Query("uid") String uid, @Query("page") String page);
}
banner轮播图的工具类 MyLoader
public class MyLoader extends ImageLoader {
@Override
public ImageView createImageView(Context context) {
return new SimpleDraweeView(context);
}
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
imageView.setImageURI(Uri.parse((String) path));
}
}
retrofit的工具类 RetrofitUtil
public class RetrofitUtil {
private final Retrofit retrofit;
private HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY);
private RetrofitUtil() {
retrofit = new Retrofit.Builder()
.baseUrl(Constant.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(buildOkhttpClinet())
.build();
}
private OkHttpClient buildOkhttpClinet() {
return new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.writeTimeout(5, TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor)
.build();
}
//暴露外部的方法
public static RetrofitUtil getDefault() {
return SingleHolder._instant;
}
private static class SingleHolder {
private static final RetrofitUtil _instant = new RetrofitUtil();
}
//动态代理创建接口实现类
public <T> T create(Class<T> Clazz) {
return retrofit.create(Clazz);
}
}
mvp-model-IndexModel
public class IndexModel {
public Observable<Ad> getAd() {
return RetrofitUtil.getDefault().create(MyRetrofit.class).getAd();
}
public Observable<Catagory> getCatagory() {
return RetrofitUtil.getDefault().create(MyRetrofit.class).getCatagory();
}
public Observable<Detail> getDetail(String pid) {
return RetrofitUtil.getDefault().create(MyRetrofit.class).getDetail(pid);
}
public Observable<AddCart> getAddCart(String uid, String pid) {
return RetrofitUtil.getDefault().create(MyRetrofit.class).getAddCart(uid, pid);
}
}
mvp-presenter-IndexPresenter
public class IndexPresenter extends BasePresenter<IndexView> {
private IndexModel indexModel;
public IndexPresenter(IndexView view) {
super(view);
}
@Override
public void initModel() {
indexModel = new IndexModel();
}
public void getAd() {
indexModel.getAd()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Ad>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(Ad ad) {
view.onSuccess(ad);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
public void getCatagory() {
indexModel.getCatagory()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Catagory>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(Catagory catagory) {
view.onCatagorySuccess(catagory);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
mvp-view-IndexView
public interface IndexView extends IView{
void onSuccess(Ad ad);
void onCatagorySuccess(Catagory catagory);
}
推荐适配器的布局
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_gravity="center_horizontal"
android:id="@+id/tuijian_img"
android:layout_width="100dp"
android:layout_height="100dp"
app:placeholderImage="@drawable/ic_launcher_background" />
<TextView
android:maxLines="2"
android:id="@+id/tuijian_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_marginTop="5dp"
android:id="@+id/tuijian_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/red" />
</LinearLayout>
推荐的适配器 TuijianAdapter
public class TuiJianAdapter extends RecyclerView.Adapter {
private List<Ad.TuijianBean.ListBean> list;
private Context context;
public TuiJianAdapter(List<Ad.TuijianBean.ListBean> list) {
this.list = list;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
context = parent.getContext();
View view = View.inflate(context, R.layout.tuijian_item, null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ViewHolder mHolder = (ViewHolder) holder;
final Ad.TuijianBean.ListBean bean = list.get(position);
//处理图片url
String imgUrl = getImgUrl(bean.getImages());
mHolder.tuijianImg.setImageURI(Uri.parse(imgUrl));
mHolder.tuijianTitle.setText(bean.getTitle());
mHolder.tuijianPrice.setText("¥" + bean.getBargainPrice());
mHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("pid",bean.getPid()+"");
context.startActivity(intent);
}
});
}
private String getImgUrl(String images) {
String[] split = images.split("\\|");
return split[0];
}
@Override
public int getItemCount() {
return list.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tuijian_img)
SimpleDraweeView tuijianImg;
@BindView(R.id.tuijian_title)
TextView tuijianTitle;
@BindView(R.id.tuijian_price)
TextView tuijianPrice;
ViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
九宫格适配器的布局
<?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"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/jgg_img"
app:placeholderImage="@drawable/ic_launcher_background"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:id="@+id/jgg_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
九宫格的适配器 Jggadapter
public class JggAdapter extends RecyclerView.Adapter {
private List<Catagory.DataBean> list;
public JggAdapter(List<Catagory.DataBean> list) {
this.list = list;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = View.inflate(parent.getContext(), R.layout.jgg_item, null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ViewHolder mHolder = (ViewHolder) holder;
final Catagory.DataBean bean = list.get(position);
mHolder.jggName.setText(bean.getName());
mHolder.jggImg.setImageURI(Uri.parse(bean.getIcon()));
}
@Override
public int getItemCount() {
return list.size();
}
static class ViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.jgg_img)
SimpleDraweeView jggImg;
@BindView(R.id.jgg_name)
TextView jggName;
ViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
推荐跳转的详情页面
detail的布局
<?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=".mvp.view.activity.DetailActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9">
<com.youth.banner.Banner
android:id="@+id/detail_banner"
android:layout_width="match_parent"
android:layout_height="350dp"></com.youth.banner.Banner>
<TextView
android:textStyle="bold"
android:id="@+id/detail_price"
android:textColor="@color/red"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:textColor="@color/black"
android:layout_marginTop="10dp"
android:id="@+id/detail_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="6"
android:orientation="horizontal">
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/lianxi" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/dianpu" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/gouwuche" />
</LinearLayout>
<Button
android:id="@+id/detail_addcart"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="4"
android:background="@color/cheng"
android:gravity="center"
android:text="加入购物车"
android:textColor="@color/white" />
</LinearLayout>
</LinearLayout>
DetailActivity
public class DetailActivity extends BaseActivity<DetailPresenter> implements DetailView {
@BindView(R.id.detail_banner)
Banner detailBanner;
@BindView(R.id.detail_price)
TextView detailPrice;
@BindView(R.id.detail_title)
TextView detailTitle;
@BindView(R.id.detail_addcart)
Button detailAddcart;
private Detail.DataBean data;
private String pid;
private int uid;
@Override
public DetailPresenter providePresenter() {
return new DetailPresenter(this);
}
@Override
public int provideLayoutId() {
return R.layout.activity_detail;
}
@Override
public void initListener() {
}
@Override
public void initDate() {
pid = getIntent().getStringExtra("pid");
uid = getSharedPreferences("user", 0).getInt("uid", 0);
// Log.d("aaa", pid);
presenter.getDetai(pid);
}
private void initBanner() {
List<String> path = new ArrayList<>();
String images = data.getImages();
String[] split = images.split("\\|");
for (String s : split) {
path.add(s);
}
detailBanner.setImages(path)
.isAutoPlay(false)
.setImageLoader(new MyLoader())
.setBannerStyle(BannerConfig.NUM_INDICATOR)
.start();
}
@Override
public void onDetailSuccess(Detail detail) {
data = detail.getData();
//初始化banner
initBanner();
detailPrice.setText("¥" + data.getBargainPrice());
detailTitle.setText(data.getTitle());
}
@Override
public void onAddCartSuccess(AddCart addCart) {
Toast.makeText(DetailActivity.this,addCart.getMsg(),Toast.LENGTH_SHORT).show();
}
@OnClick(R.id.detail_addcart)
public void onViewClicked() {
//添加之前先判断是否已登录
int i = getSharedPreferences("user", 0).getInt("islogin", 0);
if(i==1){
presenter.getAddCart(uid+"",pid);
}else {
Toast.makeText(DetailActivity.this,"登录后可以使用购物车",Toast.LENGTH_SHORT).show();
}
}
}
mvp-presenter-DetailPresenter
public class DetailPresenter extends BasePresenter<DetailView> {
private IndexModel indexModel;
public DetailPresenter(DetailView view) {
super(view);
}
@Override
public void initModel() {
indexModel = new IndexModel();
}
public void getDetai(String pid) {
indexModel.getDetail(pid)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Detail>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(Detail detail) {
view.onDetailSuccess(detail);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
public void getAddCart(String uid,String pid) {
indexModel.getAddCart(uid,pid)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<AddCart>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(AddCart addCart) {
view.onAddCartSuccess(addCart);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
mvp-view-DetailView
public interface DetailView extends IView {
void onDetailSuccess(Detail detail);
void onAddCartSuccess(AddCart addCart);
}