购物首页

1:导入依赖

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
android {
compileSdkVersion 28
defaultConfig {
    applicationId "com.bawei.dome"
    minSdkVersion 15
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}
greendao {
schemaVersion 1
//需要改包名
daoPackage 'com.bawei.dome.gen'
targetGenDir 'src/main/java'
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.squareup.retrofit2:retrofit:2.0.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
implementation 'com.squareup.okio:okio:1.5.0'
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation 'org.greenrobot:greendao:3.0.1'
implementation 'org.greenrobot:greendao-generator:3.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'org.greenrobot:greendao:3.0.1'
implementation 'org.greenrobot:greendao-generator:3.0.0'
implementation 'com.github.bumptech.glide:glide:4.8.0'
implementation('com.jcodecraeer:xrecyclerview:1.5.9') {
    exclude group: 'com.android.support'
}
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'com.github.xiaohaibin:XBanner:1.6.1'
}

2:网络请求

public class RetrofitUtils {
private static RetrofitUtils retrofitUtils;

private RetrofitUtils() {
}

public static RetrofitUtils getInstance() {

    if (retrofitUtils == null) {
        synchronized (RetrofitUtils.class) {
            if (retrofitUtils == null) {
                retrofitUtils = new RetrofitUtils();
            }
        }
    }
    return retrofitUtils;
}

public static Retrofit getRetrofit(String url ) {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .build();

    return retrofit;
}

public <T> T getApiService(String url, Class<T> service) {

    Retrofit retrofit = getRetrofit(url);
    T t = retrofit.create(service);
    return t;

}
}

3:model

public class Model {
private ApiService apiService;
private ApiService service;

public interface onDataModel{
    void getDataModel(List<DataBean.ResultBean> result);
}
onDataModel dataModel;

public void setDataModel(onDataModel dataModel) {
    this.dataModel = dataModel;
}

public void getDataModel(String keyword, int page, int count){
    apiService = RetrofitUtils.getInstance().getApiService(API.DataUrl, ApiService.class);
    Flowable<DataBean> dataUrl = apiService.getDataUrl(keyword, page, count);
    dataUrl.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new DisposableSubscriber<DataBean>() {
                @Override
                public void onNext(DataBean dataBean) {
                    List<DataBean.ResultBean> result = dataBean.getResult();
                    if (dataModel!=null){
                        dataModel.getDataModel(result);
                    }
                }

                @Override
                public void onError(Throwable t) {

                }

                @Override
                public void onComplete() {

                }
            });
}

public interface onDetailsModel{
    void getDetailsModel(DetailsBean result);
}
onDetailsModel detailsModel;

public void setDetailsModel(onDetailsModel detailsModel) {
    this.detailsModel = detailsModel;
}

public void getDetailsModel(int commodityId){
    service = RetrofitUtils.getInstance().getApiService(API.DetailsUrl, ApiService.class);
    Flowable<DetailsBean> url = service.getDetailsUrl(commodityId);
    url.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new DisposableSubscriber<DetailsBean>() {
                @Override
                public void onNext(DetailsBean detailsBean) {
                    DetailsBean result = detailsBean;
                    if (detailsModel!=null){
                        detailsModel.getDetailsModel(result);
                    }
                }

                @Override
                public void onError(Throwable t) {

                }

                @Override
                public void onComplete() {

                }
            });
}
public interface getBannerModel{
    void onBannerModel(List<BannerBean.ResultBean> list);
}
getBannerModel bannerModel;

public void setBannerModel(getBannerModel bannerModel) {
    this.bannerModel = bannerModel;
}

public void getBannerModel(){
    ApiService service = RetrofitUtils.getInstance().getApiService(API.bannerUrl, ApiService.class);
    Flowable<BannerBean> banner = service.getBanner();
    banner.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribeWith(new DisposableSubscriber<BannerBean>() {
        @Override
        public void onNext(BannerBean bannerBean) {
            List<BannerBean.ResultBean> result = bannerBean.getResult();
            if (bannerModel!=null){
                bannerModel.onBannerModel(result);
            }
        }

        @Override
        public void onError(Throwable t) {

        }

        @Override
        public void onComplete() {

        }
    });
}
}

4:present

public class Present {
ImpView impView;Model model;
public Present(ImpView impView) {
    model=new Model();
    this.impView=impView;
}
public interface onDataPresent{
    void getDataPresent(List<DataBean.ResultBean> list);
}
onDataPresent dataPresent;

public void setDataPresent(onDataPresent dataPresent) {
    this.dataPresent = dataPresent;
}

public void getDataPresent(String keyword, int page, int count){
    model.getDataModel(keyword,page,count);
    model.setDataModel(new Model.onDataModel() {
        @Override
        public void getDataModel(List<DataBean.ResultBean> result) {
            impView.getDataView(result);
        }
    });
}

public interface onDetailsPresent{
    void getDetailsPresent(DetailsBean bean);
}
onDetailsPresent detailsPresent;

public void setDetailsPresent(onDetailsPresent detailsPresent) {
    this.detailsPresent = detailsPresent;
}
public void getDetailsPresent(int commodityId){
    model.getDetailsModel(commodityId);
    model.setDetailsModel(new Model.onDetailsModel() {
        @Override
        public void getDetailsModel(DetailsBean result) {

            impView.getDetailsView(result);
        }
    });
}

public interface getBannerPresent{
    void onBannerPresent(List<BannerBean.ResultBean> list);
}
getBannerPresent bannerPresent;

public void setBannerPresent(getBannerPresent bannerPresent) {
    this.bannerPresent = bannerPresent;
}
public void getBannerPresent(){
    model.getBannerModel();;
    model.setBannerModel(new Model.getBannerModel() {
        @Override
        public void onBannerModel(List<BannerBean.ResultBean> list) {
            impView.getBannerView(list);
        }
    });
}
}

5:ImpView

public interface ImpView {
void getDataView(List<DataBean.ResultBean> dataBean);
void getDetailsView(DetailsBean detailsBean);
void getBannerView(List<BannerBean.ResultBean> list);
}

6:自定义控件搜素功能

public class CricleView extends LinearLayout {
private EditText edit;
private Button button;

public interface onListener{
    void getListener(String x);
}
onListener listener;

public void setListener(onListener listener) {
    this.listener = listener;
}
public CricleView(Context context) {
    super(context);
}


public CricleView(final Context context, AttributeSet attrs) {
    super(context, attrs);
    LayoutInflater.from(context).inflate(R.layout.cricle,this);
    edit = findViewById(R.id.edit);
    button=findViewById(R.id.btn);
    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            String s = edit.getText().toString();
            if (s.isEmpty()){
                Toast.makeText(context,"请输入搜索的内容",Toast.LENGTH_SHORT).show();
            }else {
                listener.getListener(s);
            }
        }
    });
}

public CricleView(Context context,  AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}
}

7:适配器

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.Viewholder> {
Context context;
List<DataBean.ResultBean> list;

public DataAdapter(Context context, List<DataBean.ResultBean> list) {
    this.context = context;
    this.list = list;
}

@NonNull
@Override
public DataAdapter.Viewholder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view=LayoutInflater.from(context).inflate(R.layout.entry,viewGroup,false);
    Viewholder viewholder = new Viewholder(view);
    return viewholder;
}

@Override
public void onBindViewHolder(@NonNull final DataAdapter.Viewholder viewholder, int i) {
    viewholder.textView.setText(list.get(i).getCommodityName());
    //设置图片框架
    GenericDraweeHierarchy build=GenericDraweeHierarchyBuilder.newInstance(context.getResources())
            .setRoundingParams(RoundingParams.asCircle())
            .build();
    //加载图pain类型
    viewholder.view.setHierarchy(build);
    //加载图片
    AbstractDraweeController controller = Fresco.newDraweeControllerBuilder()
            .setUri(list.get(i).getMasterPic())
            .build();
    viewholder.view.setController(controller);
    viewholder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

@Override
public int getItemCount() {
    return list.size();
}

public class Viewholder extends RecyclerView.ViewHolder {
    private SimpleDraweeView view;
    private TextView textView;
    public Viewholder(@NonNull View itemView) {
        super(itemView);
        textView=itemView.findViewById(R.id.text);
        view=itemView.findViewById(R.id.img);
    }
}
}

8:在Activity中处理数据

public class MainActivity extends AppCompatActivity implements ImpView {
private RecyclerView recyclerView;
private Present present;
private String Keyword;
private int page=1;
private int count=10;
private CricleView cricleView;
private XBanner xBanner;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerView=findViewById(R.id.rec);
    present = new Present(this);
    present.getDataPresent("高跟鞋",page,count);
    GridLayoutManager gridLayoutManager=new GridLayoutManager(this,2);
    recyclerView.setLayoutManager(gridLayoutManager);
    cricleView=findViewById(R.id.cricle);
    //自定义框架点击搜素功能
    cricleView.setListener(new CricleView.onListener() {
        @Override
        public void getListener(String x) {
            present.getDataPresent(x,page,count);
        }
    });
    xBanner=findViewById(R.id.banner);
    Present present1 = new Present(this);
    present1.getBannerPresent();
}
//加载数据
@Override
public void getDataView(List<DataBean.ResultBean> dataBean) {
    DataAdapter dataAdapter = new DataAdapter(MainActivity.this, dataBean);
    recyclerView.setAdapter(dataAdapter);
}

@Override
public void getDetailsView(DetailsBean detailsBean) {

}
//加载banner
@Override
public void getBannerView(final List<BannerBean.ResultBean> list) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            xBanner.setData(list,null);
            xBanner.loadImage(new XBanner.XBannerAdapter() {
                @Override
                public void loadBanner(XBanner banner, Object model, View view, int position) {
                    Glide.with(MainActivity.this)
                            .load(list.get(position).getImageUrl())
                            .into((ImageView) view);
                    xBanner.setPageChangeDuration(3000);
                }
            });
        }
    });
}
}

猜你喜欢

转载自blog.csdn.net/weixin_43926099/article/details/88685198