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);
}
});
}
});
}
}