dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.+' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.okhttp3:okhttp:3.1.2' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4' compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.google.code.gson:gson:2.6.2' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.facebook.fresco:fresco:0.11.0' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' testCompile 'junit:junit:4.12' compile 'org.greenrobot:eventbus:3.0.0'
}
依赖文件
mainface文件<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mx.miaoxinzhoukao3"> <uses-permission android:name="android.permission.INTERNET" /> <application android:name=".utils.App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".DetaActivity" /> <activity android:name=".JiaActivity" /> </application> </manifest>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" > <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/oo_sim" android:layout_width="match_parent" android:layout_height="600dp" /> <TextView android:id="@+id/oo_tv" android:layout_below="@+id/oo_sim" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn" android:layout_width="150dp" android:layout_height="50dp" android:text="加入购物车" android:background="#ff0000" android:textColor="#ffffff" android:layout_alignParentBottom="true" android:layout_alignParentRight="true"/> </RelativeLayout>
activity_deta.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="com.example.mx.miaoxinzhoukao3.JiaActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="20dp" > <TextView android:id="@+id/jia_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="编辑"/> <TextView android:id="@+id/jia_tv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:visibility="gone" android:text="完成"/> </RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_View" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <LinearLayout android:gravity="center_vertical" android:padding="10dp" android:orientation="horizontal" android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="wrap_content"> <CheckBox android:background="@drawable/shopcart_unselected" android:button="@null" android:id="@+id/quanxuan" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:textStyle="bold" android:layout_marginLeft="10dp" android:textSize="23sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全选" /> <LinearLayout android:padding="10dp" android:layout_marginLeft="10dp" android:orientation="vertical" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content"> <TextView android:textColor="#e53e42" android:id="@+id/total_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="总价 : ¥0元" /> <TextView android:id="@+id/total_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="共0件商品" /> </LinearLayout> <TextView android:id="@+id/shanchu" android:gravity="center" android:textSize="25sp" android:text="删除" android:textColor="#fff" android:visibility="gone" android:background="@drawable/qujiesuan" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/jiesuan" android:gravity="center" android:textSize="25sp" android:text="去结算" android:textColor="#fff" android:background="@drawable/qujiesuan" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
activity_jia.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" tools:context="com.example.mx.miaoxinzhoukao3.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> </LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:gravity="center_vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:background="#fff" android:textSize="20sp" android:id="@+id/reverse" android:text="一" android:layout_width="50dp" android:layout_height="wrap_content" /> <EditText android:textStyle="bold" android:textSize="23sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" android:id="@+id/count" /> <Button android:id="@+id/add" android:background="#fff" android:textSize="25sp" android:text="+" android:layout_width="50dp" android:layout_height="wrap_content" /> </LinearLayout>
custom_jiajian.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:padding="15dp" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <CheckBox android:id="@+id/shop_checkbox" android:layout_width="50dp" android:layout_height="50dp" /> <TextView android:layout_marginLeft="20dp" android:text="良品铺子" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="23sp" android:textStyle="bold" android:id="@+id/shop_name" /> </LinearLayout> <LinearLayout android:gravity="center_vertical" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <CheckBox android:id="@+id/item_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/item_face" android:src="@mipmap/ic_launcher" fresco:failureImageScaleType="centerInside" android:layout_width="120dp" android:layout_height="120dp" /> <LinearLayout android:layout_marginLeft="10dp" android:orientation="vertical" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content"> <TextView android:id="@+id/item_name" android:textSize="20sp" android:text="三只松鼠" android:layout_width="wrap_content" android:layout_weight="1" android:layout_height="0dp" /> <TextView android:textColor="#f00" android:id="@+id/item_price" android:textSize="23sp" android:text="299" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" /> <com.example.mx.miaoxinzhoukao3.utils.CustomJiaJian android:id="@+id/custom_jiajian" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> <ImageView android:id="@+id/item_delete" android:layout_marginRight="10dp" android:src="@mipmap/ic_launcher" android:layout_width="30dp" android:layout_height="30dp" /> </LinearLayout> </LinearLayout>
recy_cart_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/sim" android:layout_width="match_parent" android:layout_height="200dp" /> <TextView android:id="@+id/tv" android:layout_below="@+id/sim" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout>
recy_item.xml
package com.example.mx.miaoxinzhoukao3.view; import com.example.mx.miaoxinzhoukao3.bean.GoodsBean; /** * Created by Mx丶 on 2017/12/19. */ public interface IGoodsView { void showData(GoodsBean bean); int pid(); }
IGoodsView
package com.example.mx.miaoxinzhoukao3.view; import com.example.mx.miaoxinzhoukao3.bean.JiaBean; /** * Created by Mx丶 on 2017/12/19. */ public interface IJiaView { void showData(JiaBean bean); }
IJiaView
package com.example.mx.miaoxinzhoukao3.view; import com.example.mx.miaoxinzhoukao3.bean.TuiBean; import java.util.List; /** * Created by Mx丶 on 2017/12/19. */ public interface ITuiView { void showData(List<TuiBean.TuijianBean.ListBean> list); }
ITuiView
package com.example.mx.miaoxinzhoukao3.utils; import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; /** * Created by Mx丶 on 2017/12/19. */ public class App extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
App
package com.example.mx.miaoxinzhoukao3.utils; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; import com.example.mx.miaoxinzhoukao3.R; /** * Created by Mx丶 on 2017/12/19. */ public class CustomJiaJian extends LinearLayout { private Button reverse; private Button add; private EditText countEdit; private int mCount =1; public CustomJiaJian(Context context) { super(context); } public CustomJiaJian(final Context context, AttributeSet attrs) { super(context, attrs); View view = View.inflate(context, R.layout.custom_jiajian,this); reverse = (Button) view.findViewById(R.id.reverse); add = (Button) view.findViewById(R.id.add); countEdit = (EditText) view.findViewById(R.id.count); reverse.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String content = countEdit.getText().toString().trim(); int count = Integer.valueOf(content); if(count>1){ mCount = count-1; countEdit.setText(mCount+""); //回调给adapter里面 if(customListener!=null){ customListener.jiajian(mCount); } } if (count==1){ Toast.makeText(context,"最小只能为一",Toast.LENGTH_SHORT).show(); } } }); add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String content = countEdit.getText().toString().trim(); int count = Integer.valueOf(content)+1; mCount = count; countEdit.setText(mCount+""); //接口回调给adapter if(customListener!=null){ customListener.jiajian(mCount); } } }); } public CustomJiaJian(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } CustomListener customListener; public void setCustomListener(CustomListener customListener){ this.customListener = customListener; } //加减的接口 public interface CustomListener{ public void jiajian(int count); public void shuRuZhi(int count); } //这个方法是供recyadapter设置 数量时候调用的 public void setEditText(int num) { if(countEdit !=null) { countEdit.setText(num + ""); } } }
CustomJiaJian
package com.example.mx.miaoxinzhoukao3.utils; import com.example.mx.miaoxinzhoukao3.bean.GoodsBean; import com.example.mx.miaoxinzhoukao3.bean.JiaBean; import com.example.mx.miaoxinzhoukao3.bean.TuiBean; import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Query; import rx.Observable; /** * Created by Mx丶 on 2017/12/19. */ public interface GoodsAPI { @GET("ad/getAd") Observable<TuiBean> Tui(); @GET("product/getProductDetail") Observable<GoodsBean> get(@Query("pid") int pid); @GET("product/addCart?uid=2237") Call<ResponseBody> add(@Query("pid") int AddPid); @GET("product/getCarts?uid=2237") Observable<JiaBean> Jia(); @GET("product/deleteCart?uid=2237") Call<ResponseBody> getShan(@Query("pid") int ShanPid); }
GoodsAPI
package com.example.mx.miaoxinzhoukao3.utils; import android.content.Context; import android.graphics.Bitmap; import android.os.Environment; import com.facebook.cache.disk.DiskCacheConfig; import com.facebook.common.disk.NoOpDiskTrimmableRegistry; import com.facebook.common.internal.Supplier; import com.facebook.common.memory.MemoryTrimType; import com.facebook.common.memory.MemoryTrimmable; import com.facebook.common.memory.NoOpMemoryTrimmableRegistry; import com.facebook.common.util.ByteConstants; import com.facebook.imagepipeline.cache.MemoryCacheParams; import com.facebook.imagepipeline.core.ImagePipelineConfig; import com.facebook.imagepipeline.core.ImagePipelineFactory; /** * Created by Mx丶 on 2017/12/19. */ public class ImagePipelineConfigUtils { //分配的可用内存 private static final int MAX_HEAP_SIZE = (int) Runtime.getRuntime().maxMemory(); //使用的缓存数量 private static final int MAX_MEMORY_CACHE_SIZE = MAX_HEAP_SIZE / 4; //小图极低磁盘空间缓存的最大值(特性:可将大量的小图放到额外放在另一个磁盘空间防止大图占用磁盘空间而删除了大量的小图) private static final int MAX_SMALL_DISK_VERYLOW_CACHE_SIZE = 20 * ByteConstants.MB; //小图低磁盘空间缓存的最大值(特性:可将大量的小图放到额外放在另一个磁盘空间防止大图占用磁盘空间而删除了大量的小图) private static final int MAX_SMALL_DISK_LOW_CACHE_SIZE = 60 * ByteConstants.MB; //默认图极低磁盘空间缓存的最大值 private static final int MAX_DISK_CACHE_VERYLOW_SIZE = 20 * ByteConstants.MB; //默认图低磁盘空间缓存的最大值 private static final int MAX_DISK_CACHE_LOW_SIZE = 60 * ByteConstants.MB; //默认图磁盘缓存的最大值 private static final int MAX_DISK_CACHE_SIZE = 100 * ByteConstants.MB; //小图所放路径的文件夹名 private static final String IMAGE_PIPELINE_SMALL_CACHE_DIR = "ImagePipelineCacheSmall"; //默认图所放路径的文件夹名 private static final String IMAGE_PIPELINE_CACHE_DIR = "ImagePipelineCacheDefault"; public static ImagePipelineConfig getDefaultImagePipelineConfig(Context context) { //内存配置 final MemoryCacheParams bitmapCacheParams = new MemoryCacheParams( MAX_MEMORY_CACHE_SIZE<