底层build.gradle
ext{ retrofitVersion = '2.4.0' rxandroid = '2.1.0' butterknife = '8.8.1' okhttp = '3.11.0' }
继承base底层
本层build.gradle
compile 'com.squareup.retrofit2:converter-scalars:2.0.0' compile 'com.facebook.fresco:fresco:0.11.0' compile 'com.hjm:BottomTabBar:1.1.1' implementation 'com.sunfusheng:marqueeview:1.3.2' compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14' compile 'org.greenrobot:eventbus:3.0.0' compile 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' compile 'com.jcodecraeer:xrecyclerview:1.5.9' compile 'com.youth.banner:banner:1.4.9' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.gyf.immersionbar:immersionbar:2.3.1' compile "com.squareup.retrofit2:retrofit:$rootProject.ext.retrofitVersion" compile "com.squareup.retrofit2:converter-gson:$rootProject.ext.retrofitVersion" compile "com.squareup.retrofit2:adapter-rxjava2:$rootProject.ext.retrofitVersion" compile 'io.reactivex.rxjava2:rxandroid:2.1.0' compile 'com.squareup.okhttp3:okhttp:3.11.0' compile 'com.squareup.okhttp3:logging-interceptor:3.11.0' testCompile 'junit:junit:4.12' compile project(':base') } configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '25.0.1' } } } }
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <application android:name=".app.App"
activity_main.xml
<com.hjm.bottomtabbar.BottomTabBar android:id="@+id/tab_var" android:layout_width="match_parent" android:layout_height="match_parent" />
MainActivity
public class MainActivity extends AppCompatActivity { private BottomTabBar tab_var; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //沉浸式状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //隐藏ActionBar ActionBar actionBar = getSupportActionBar(); actionBar.hide(); } tab_var = (BottomTabBar) findViewById(R.id.tab_var); initView(); } private void initView() { ImmersionBar.with(this).init(); tab_var.init(getSupportFragmentManager()) .setImgSize(50,50) .setFontSize(15) .setChangeColor(Color.RED,Color.GRAY) .addTabItem("首页",R.drawable.syn, Fragment1.class) .addTabItem("其它",R.drawable.myn, Fragment2.class); } }
activity_fragment1.xml
<com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/shouye_rev" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:id="@+id/head_search_rr" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginLeft="14.5dp" android:layout_marginTop="10dp"> <LinearLayout android:id="@+id/head_ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/saoyisao" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5.5dp" android:text="扫一扫" android:textSize="10sp" /> </LinearLayout> <RelativeLayout android:id="@+id/head_rr" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/head_ll" android:layout_alignParentRight="true" android:layout_marginRight="15dp"> <ImageView android:id="@+id/head_img_xiaoxi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:src="@drawable/xiaoxi" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/head_img_xiaoxi" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:text="消息" android:textSize="10sp" /> </RelativeLayout> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/head_ll" android:layout_alignParentTop="true" android:layout_marginLeft="14dp" android:layout_marginRight="13dp" android:layout_toLeftOf="@id/head_rr" android:layout_toRightOf="@id/head_ll" android:background="@drawable/sousuokuang"> <ImageView android:id="@+id/head_img_sousuo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="7dp" android:src="@drawable/sousuo" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="9dp" android:layout_toRightOf="@id/head_img_sousuo" android:background="@null" android:hint="阿斯顿马丁2016豪华限量版" android:textSize="14sp" /> </RelativeLayout> </RelativeLayout>
one_banner.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="200dp"> <com.youth.banner.Banner android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
one_class.xml
<?xml version="1.0" encoding="utf-8"?> <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.RecyclerView android:id="@+id/class_rev" android:layout_width="match_parent" android:layout_height="match_parent"/> </HorizontalScrollView>
one_class_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="5dp"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/fei_img" android:layout_width="55dp" android:layout_height="55dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp"/> <TextView android:id="@+id/fei_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="10dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" /> </LinearLayout>
one_miaosha.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/miao_img" android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center"/> <TextView android:id="@+id/miao_text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
one_miaosha_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/miao_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#fff"/> <android.support.v7.widget.RecyclerView android:id="@+id/miao_rev" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
one_miaosha_item2.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="50dp" android:background="#ccc" android:layout_height="50dp" android:text="京东秒杀" android:textSize="20dp" android:paddingLeft="2dp"/> <com.sunfusheng.marqueeview.MarqueeView android:id="@+id/marqueeView" android:layout_width="wrap_content" android:layout_gravity="center" android:layout_height="50dp" android:background="#ccc"/> </LinearLayout>
one_tuijian.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/tui_img" android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center"/> <TextView android:id="@+id/tui_text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
one_tuijian_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tui_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" /> <android.support.v7.widget.RecyclerView android:id="@+id/tui_rev" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
OneBean
https://www.zhaoapi.cn/home/getHome
App
public class App extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
Api
public interface Api { @POST("home/getHome") Observable<OneBean> shouye(); }
Contants
public class Contants { public static final String BASE_RELEASE_URL = "http://www.zhaoapi.cn/"; }
Contract
public interface Contract { //Presenter abstract class Presenter extends BasePresenter<Model,View> { public abstract void slect(); @Override public Model getmModel() { return new com.bwie.yuekao.shouye.model.Model(); } } //model层接口 interface Model extends IBaseModel { Observable<OneBean> slect(); } //view层接口 interface View extends IBaseView { void success(OneBean oneBean); void fail(String msg); } }
Model
public class Model implements Contract.Model{ @Override public Observable<OneBean> slect() { return RetrofitUtils.getInstance().createApi(Contants.BASE_RELEASE_URL, Api.class) .shouye().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); } }
Presenter
public class Presenter extends Contract.Presenter { @Override public void slect() { mModel.slect().subscribe(new Consumer<OneBean>() { @Override public void accept(OneBean oneBean) throws Exception { mView.success(oneBean); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { mView.fail("网络有问题 ,请稍候再试"); } }); } }
OneAdapter
public class OneAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ private Context context; private OneBean.DataBean data; private int one = 0; private int two = 1; private int tree = 2; private int four =3; private int five =4; private List<String> list; public OneAdapter(Context context, OneBean.DataBean data) { this.context = context; this.data = data; list = new ArrayList<>(); for (int i = 0; i < data.getBanner().size(); i++) { list.add(data.getBanner().get(i).getIcon()); } } @Override public int getItemViewType(int position) { if (position == 0) { return one; } else if (position == 1) { return two; }else if (position==2){ return tree; }else if (position==3){ return four; } return five; } @Override public long getItemId(int position) { return 5; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == one) { View view = LayoutInflater.from(context).inflate(R.layout.one_banner, parent, false); return new BannerViewHolder(view); } else if (viewType == two) { View view = LayoutInflater.from(context).inflate(R.layout.one_class, parent, false); return new ClassHolder(view); } else if (viewType == tree) { View view = LayoutInflater.from(context).inflate(R.layout.one_miaosha_item2, parent, false); return new Miaosha2ViewHolder(view); } else if (viewType == four) { View view = LayoutInflater.from(context).inflate(R.layout.one_miaosha_item, parent, false); return new MiaoshaViewHolder(view); } else if(viewType==five) { View view = LayoutInflater.from(context).inflate(R.layout.one_tuijian_item, parent, false); return new TuijianViewHolder(view); } return null; } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder,final int position) { if (holder instanceof BannerViewHolder) { ((BannerViewHolder) holder).banner.setImages(list) .setImageLoader(new bannerGlide()) .start(); } if (holder instanceof ClassHolder) { OneClassAdapter classAdapter = new OneClassAdapter(context, data); ((ClassHolder) holder).class_rev.setAdapter(classAdapter); } if (holder instanceof MiaoshaViewHolder) { ((MiaoshaViewHolder) holder).miao_name.setText(data.getMiaosha().getName()); OneMiaoShaAdapter miaoAdapter = new OneMiaoShaAdapter(context, data); ((MiaoshaViewHolder) holder).miao_rev.setAdapter(miaoAdapter); } if (holder instanceof TuijianViewHolder) { ((TuijianViewHolder) holder).tui_name.setText(data.getTuijian().getName()); OneTuiJianAdapter tuiAdapter = new OneTuiJianAdapter(context, data); ((TuijianViewHolder) holder).tui_rev.setAdapter(tuiAdapter); } if(holder instanceof Miaosha2ViewHolder){ List<String> info = new ArrayList<>(); for (int i = 0; i < data.getMiaosha().getList().size(); i++) { info.add( data.getMiaosha().getList().get(i).getTitle()); } ((Miaosha2ViewHolder) holder).marqueeView.startWithList(info); ((Miaosha2ViewHolder) holder).marqueeView.startWithList(info, R.anim.anim_bottom_in, R.anim.anim_top_out); } } class bannerGlide extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { Glide.with(context).load(path) .placeholder(R.mipmap.ic_launcher) .into(imageView); } } @Override public int getItemCount() { return list.size(); } private class BannerViewHolder extends RecyclerView.ViewHolder { private Banner banner; public BannerViewHolder(View itemView) { super(itemView); banner = itemView.findViewById(R.id.banner); } } private class ClassHolder extends RecyclerView.ViewHolder { private RecyclerView class_rev; public ClassHolder(View itemView) { super(itemView); class_rev = itemView.findViewById(R.id.class_rev); class_rev.setLayoutManager(new GridLayoutManager(context, 10)); } } private class MiaoshaViewHolder extends RecyclerView.ViewHolder { private TextView miao_name; private RecyclerView miao_rev; public MiaoshaViewHolder(View itemView) { super(itemView); miao_name = itemView.findViewById(R.id.miao_name); miao_rev = itemView.findViewById(R.id.miao_rev); miao_rev.setLayoutManager(new GridLayoutManager(context, 2)); } } private class TuijianViewHolder extends RecyclerView.ViewHolder { private TextView tui_name; private RecyclerView tui_rev; public TuijianViewHolder(View itemView) { super(itemView); tui_name = itemView.findViewById(R.id.tui_name); tui_rev = itemView.findViewById(R.id.tui_rev); tui_rev.setLayoutManager(new GridLayoutManager(context, 2)); } } private class Miaosha2ViewHolder extends RecyclerView.ViewHolder{ private MarqueeView marqueeView; public Miaosha2ViewHolder(View itemView) { super(itemView); marqueeView = itemView.findViewById(R.id.marqueeView); } } }
OneClassAdapter
public class OneClassAdapter extends RecyclerView.Adapter<OneClassAdapter.ClassViewHolder>{ private Context context; private OneBean.DataBean data; private final List<OneBean.DataBean.FenleiBean> class_feilei; public OneClassAdapter(Context context, OneBean.DataBean data) { this.context = context; this.data = data; class_feilei = data.getFenlei(); } @Override public ClassViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.one_class_item, parent, false); return new ClassViewHolder(view); } @Override public void onBindViewHolder(ClassViewHolder holder, int position) { holder.fei_text.setText(class_feilei.get(position).getName()); Uri uri = Uri.parse(class_feilei.get(position).getIcon()); holder.fei_img.setImageURI(uri); } @Override public int getItemCount() { return class_feilei.size(); } public class ClassViewHolder extends RecyclerView.ViewHolder { private SimpleDraweeView fei_img; private TextView fei_text; public ClassViewHolder(View itemView) { super(itemView); fei_img = itemView.findViewById(R.id.fei_img); fei_text = itemView.findViewById(R.id.fei_text); } } }
OneMiaoShaAdapter
public class OneMiaoShaAdapter extends RecyclerView.Adapter<OneMiaoShaAdapter.MiaoViewHolder>{ private Context context; private OneBean.DataBean data; private final List<OneBean.DataBean.MiaoshaBean.ListBean> list; public OneMiaoShaAdapter(Context context, OneBean.DataBean data) { this.context = context; this.data = data; list = data.getMiaosha().getList(); } @Override public MiaoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.one_miaosha, parent, false); return new MiaoViewHolder(view); } @Override public void onBindViewHolder(MiaoViewHolder holder, int position) { holder.miao_text.setText(list.get(position).getTitle()); Uri uri = Uri.parse(list.get(position).getImages().split("\\|")[0]); holder.miao_img.setImageURI(uri); } @Override public int getItemCount() { return list.size(); } public class MiaoViewHolder extends RecyclerView.ViewHolder { private SimpleDraweeView miao_img; private TextView miao_text; public MiaoViewHolder(View itemView) { super(itemView); miao_img = itemView.findViewById(R.id.miao_img); miao_text = itemView.findViewById(R.id.miao_text); } } }
OneTuiJianAdapter
public class OneTuiJianAdapter extends RecyclerView.Adapter<OneTuiJianAdapter.TuiViewHolder>{ private Context context; private OneBean.DataBean data; private final List<OneBean.DataBean.TuijianBean.ListBeanX> list; public OneTuiJianAdapter(Context context, OneBean.DataBean data) { this.context = context; this.data = data; list = data.getTuijian().getList(); } @Override public TuiViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.one_tuijian, parent, false); return new TuiViewHolder(view); } @Override public void onBindViewHolder(TuiViewHolder holder, int position) { holder.tui_text.setText(list.get(position).getTitle()); Uri uri = Uri.parse(list.get(position).getImages().split("\\|")[0]); holder.tui_img.setImageURI(uri); } @Override public int getItemCount() { return list.size(); } public class TuiViewHolder extends RecyclerView.ViewHolder { private SimpleDraweeView tui_img; private TextView tui_text; public TuiViewHolder(View itemView) { super(itemView); tui_img = itemView.findViewById(R.id.tui_img); tui_text = itemView.findViewById(R.id.tui_text); } } }
Fragment1
public class Fragment1 extends BaseMvpFragment<Contract.Model,Contract.Presenter> implements Contract.View { @BindView(R.id.shouye_rev) XRecyclerView shouye_rev; @BindView(R.id.head_search_rr) View searchView; private int mDistanceY = 0; private int page = 1; private OneAdapter oneAdapter; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what==0){ shouye_rev.refreshComplete(); } } }; @Override protected int bindLayoutId() { return R.layout.activity_fragment1; } @Override protected void initData() { super.initData(); shouye_rev.setLayoutManager(new LinearLayoutManager(getActivity())); shouye_rev.setLoadingMoreEnabled(true); shouye_rev.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { page = 1; oneAdapter.notifyDataSetChanged(); new Thread(){ @Override public void run() { super.run(); handler.sendEmptyMessageDelayed(0,2000); } }.start(); } @Override public void onLoadMore() { page += 1; oneAdapter.notifyDataSetChanged(); handler.postDelayed(new Runnable() { @Override public void run() { shouye_rev.loadMoreComplete(); } },2000); } }); presenter.slect(); } @Override public BasePresenter initPresenter() { return new Presenter(); } @Override public void showLoading() { } @Override public void hideLoading() { } @Override public void success(OneBean oneBean) { oneAdapter = new OneAdapter(getActivity(), oneBean.getData()); shouye_rev.setAdapter(oneAdapter); } @Override public void fail(String msg) { } }
Fragment2
public class Fragment2 extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = View.inflate(getActivity(),R.layout.activity_fragment2,null); return view; } }