使用的权限和依赖
implementation 'com.roughike:bottom-bar:1.3.3' implementation 'com.jcodecraeer:xrecyclerview:1.3.2' implementation 'com.android.support:design:27.1.1' implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation "io.reactivex.rxjava2:rxjava:2.1.13"//使retrofit支持Rxjava implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.4.0' //使retrofit支持Gson解析 implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation 'com.google.dagger:dagger:2.8' annotationProcessor 'com.google.dagger:dagger-compiler:2.7' implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' implementation 'com.facebook.fresco:fresco:1.9.0' implementation 'org.greenrobot:greendao:3.2.2' // add library implementation 'com.youth.banner:banner:1.4.10'
<uses-permission android:name="android.permission.INTERNET"/>
activity_second
xml version="1.0" encoding="utf-8"?> <ScrollView 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=".SecondActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.youth.banner.Banner android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="200dp" /> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/xrv" android:layout_width="match_parent" android:layout_height="match_parent"/> LinearLayout> ScrollView>
item
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:id="@+id/ll" android:orientation="vertical" xmlns:app="http://schemas.android.com/apk/res-auto"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/sdv" android:layout_width="20dp" android:layout_height="20dp" android:background="@mipmap/ic_launcher" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/sdv" android:text="1111" /> <TextView android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="2222" /> RelativeLayout> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="1111" /> <TextView android:id="@+id/xing" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="333" /> LinearLayout>
SecondActivity
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import com.bwie.test.adapter.HomePageAdapter; import com.bwie.test.bean.HomePageBean; import com.bwie.test.bean.LiebiaoBean; import com.bwie.test.module.HttpModule; import com.bwie.test.mysecond01.base.BaseActivity; import com.bwie.test.mysecond01.homeimage.HomePagePresenter; import com.bwie.test.mysecond01.homeimage.HomepageContent; import com.bwie.test.net.GlideImageLoader; import com.bwie.test.presenter.DaggerHttpModulePenotent; import com.jcodecraeer.xrecyclerview.XRecyclerView; import com.youth.banner.Banner; import com.youth.banner.listener.OnBannerListener; import java.util.ArrayList; import java.util.List; public class SecondActivity extends BaseActivityimplements HomepageContent.View { private Banner mBanner; private XRecyclerView mXrv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView();//初始化 mPresenter.homepagePresenter(); mPresenter.homeliebiaoPresenter(); } @Override public int getContentLayout() { return R.layout.activity_second; } @Override public void inject() { DaggerHttpModulePenotent.builder() .httpModule(new HttpModule()) .build() .inject(this); } @Override public void homepageView(HomePageBean homePageBean) { //List datasBeans = (List mBanner.setImageLoader(new GlideImageLoader()); final List) //listBean.getData(); data = homePageBean.getData(); List list=new ArrayList<>(); for (int i = 0; i mBanner.setImages(list); mBanner.start(); mBanner.setOnBannerListener(new OnBannerListener() { @Override public void OnBannerClick(int position) { // Intent intent=new Intent(SecondActivity.this,WebActivity.class); // intent.putExtra("link",data.get(position).getUrl()); // startActivity(intent); } }); } @Override public void liebiaoView(LiebiaoBean liebiaoBean) { final List datas = liebiaoBean.getData().getDatas(); mXrv.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); HomePageAdapter homePageAdapter = new HomePageAdapter(this,datas); mXrv.setAdapter(homePageAdapter); homePageAdapter.getIteam(new HomePageAdapter.SetIteamOnclick1() { @Override public void setOnclick1(int position) { // Intent intent=new Intent(SecondActivity.this,WebActivity.class); // intent.putExtra("link",datas.get(position).getLink()); // startActivity(intent); } }); } private void initView() { mBanner = (Banner) findViewById(R.id.banner); mXrv = (XRecyclerView) findViewById(R.id.xrv); mXrv.setLayoutManager(new LinearLayoutManager(this)); } @Override public void onDestroy() { super.onDestroy(); mBanner.stopAutoPlay(); } }
app文件夹下MyApplication
import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; public class MyApplication extends Application{ @Override public void onCreate() { super.onCreate(); //初始化fresco Fresco.initialize(this); } }
homeimage文件夹下HomepageContent
import com.bwie.test.bean.HomePageBean; import com.bwie.test.bean.LiebiaoBean; import com.bwie.test.mysecond01.base.BaseContent; public interface HomepageContent { interface View extends BaseContent.BaseView { void homepageView(HomePageBean homePageBean); void liebiaoView(LiebiaoBean liebiaoBean); } interface Presenter extends BaseContent.BasePresenter{ void homepagePresenter(); void homeliebiaoPresenter(); } }
HomePagePresenter
import com.bwie.test.bean.HomePageBean; import com.bwie.test.bean.LiebiaoBean; import com.bwie.test.mysecond01.base.BasePresenter; import com.bwie.test.utils.HomePageApi; import com.bwie.test.utils.LiebiaoApi; import javax.inject.Inject; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; public class HomePagePresenter extends BasePresenterimplements HomepageContent.Presenter { HomePageApi homePageApi; LiebiaoApi liebiaoApi; @Inject public HomePagePresenter(HomePageApi homePageApi,LiebiaoApi liebiaoApi) { this.homePageApi = homePageApi; this.liebiaoApi=liebiaoApi; } @Override public void homepagePresenter() { homePageApi.gethomeService() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer () { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(HomePageBean homePageBean) { if (mView!=null){ mView.homepageView(homePageBean); } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } @Override public void homeliebiaoPresenter() { liebiaoApi.getSerrvice() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer () { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(LiebiaoBean liebiaoBean) { if (mView!=null){ mView.liebiaoView(liebiaoBean); } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } }
base文件夹下BaseActivity
import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import com.bwie.test.net.IBase; import javax.inject.Inject; public abstract class BaseActivity<T extends BaseContent.BasePresenter> extends AppCompatActivity implements BaseContent.BaseView,IBase { @Inject protected T mPresenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getContentLayout()); inject(); mPresenter.attachView(this); } @Override public void onDestroy() { super.onDestroy(); mPresenter.datechView(); } }
BaseContent
public interface BaseContent { interface BaseView{ } interface BasePresenter<T extends BaseView>{ void attachView(T view); void datechView(); } }
BasePresenter
public class BasePresenter<T extends BaseContent.BaseView> implements BaseContent.BasePresenter<T> { public T mView; @Override public void attachView(T view) { if (view!=null){ this.mView=view; } } @Override public void datechView() { if (mView!=null){ mView=null; } } }
adapter文件夹下HomePageAdapter
import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import com.bwie.test.bean.LiebiaoBean; import com.bwie.test.mysecond01.R; import java.util.ArrayList; import java.util.List; public class HomePageAdapter extends RecyclerView.Adapter{ private List list; private Context context; private LayoutInflater inflater; private SetIteamOnclick1 setIteamOnclick1; public interface SetIteamOnclick1{ void setOnclick1(int position); } public HomePageAdapter( Context context,List list) { this.list=list; this.context = context; inflater=LayoutInflater.from(context); } /*public void shuaxin(List list){ this.list.clear(); this.list.addAll(list); notifyDataSetChanged(); } public void jia(Listlist){ //this.list.clear(); this.list.addAll(list); notifyDataSetChanged(); }*/ public void getIteam(SetIteamOnclick1 setIteamOnclick1) { this.setIteamOnclick1 = setIteamOnclick1; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view =inflater.inflate(R.layout.item, parent, false); ViewHolder holder=new ViewHolder(view); return holder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { ViewHolder holder1= (ViewHolder) holder; holder1.name.setText(list.get(position).getAuthor()); holder1.time.setText(list.get(position).getNiceDate()); holder1.title.setText(list.get(position).getTitle()); holder1.xing.setText(list.get(position).getSuperChapterName()); holder1.ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (setIteamOnclick1!=null) { setIteamOnclick1.setOnclick1(position); } } }); } @Override public int getItemCount() { return list.size(); } class ViewHolder extends RecyclerView.ViewHolder{ private final TextView name; private final TextView time; private final TextView title; private final TextView xing; private final LinearLayout ll; public ViewHolder(View itemView) { super(itemView); name = itemView.findViewById(R.id.name); time = itemView.findViewById(R.id.time); title = itemView.findViewById(R.id.title); xing = itemView.findViewById(R.id.xing); ll = itemView.findViewById(R.id.ll); } } }
module文件夹下HttpModule
import com.bwie.test.utils.Api; import com.bwie.test.utils.HomePageApi; import com.bwie.test.utils.HomepageApiService; import com.bwie.test.utils.LiebiaoApi; import com.bwie.test.utils.LiebiaoService; import java.util.concurrent.TimeUnit; import dagger.Module; import dagger.Provides; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; @Module public class HttpModule { @Provides OkHttpClient.Builder proviteOkHttpClient(){ return new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(15,TimeUnit.SECONDS) .writeTimeout(15,TimeUnit.SECONDS); } @Provides HomePageApi proviteHomePageApi(OkHttpClient.Builder builder){ HomepageApiService homepageApiService = new Retrofit.Builder() .baseUrl(Api.HomePAGE) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .client(builder.build()) .build() .create(HomepageApiService.class); return HomePageApi.getHomePageApi(homepageApiService); } @Provides LiebiaoApi proviteLiebiaoApi(OkHttpClient.Builder builder){ LiebiaoService liebiaoService = new Retrofit.Builder() .baseUrl(Api.HomePAGE) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .client(builder.build()) .build() .create(LiebiaoService.class); return LiebiaoApi.getLiebiao(liebiaoService); } }
presenter文件夹下HttpModulePenotent
import com.bwie.test.module.HttpModule; import com.bwie.test.mysecond01.SecondActivity; import javax.inject.Inject; import dagger.Component; import dagger.Module; @Component(modules = HttpModule.class) public interface HttpModulePenotent { void inject(SecondActivity secondActivity); }
utils文件夹下Api
public interface Api { String HomePAGE="http://www.wanandroid.com/"; }
HomepageApiService
import com.bwie.test.bean.HomePageBean; import io.reactivex.Observable; import retrofit2.http.GET; public interface HomepageApiService { @GET("banner/json") ObservablegethomeService(); }
HomepageApi
import com.bwie.test.bean.HomePageBean; import io.reactivex.Observable; public class HomePageApi { private static HomePageApi homePageApi; private HomepageApiService homepageApiService; public HomePageApi(HomepageApiService homepageApiService) { this.homepageApiService = homepageApiService; } public static HomePageApi getHomePageApi(HomepageApiService homepageApiService){ if (homePageApi==null){ homePageApi=new HomePageApi(homepageApiService); } return homePageApi; } public ObservablegethomeService(){ return homepageApiService.gethomeService(); } }
LiebiaoService
import com.bwie.test.bean.LiebiaoBean; import io.reactivex.Observable; import retrofit2.http.GET; public interface LiebiaoService { @GET("article/list/0/json") ObservablegetLieService(); }
LiebiaoApi
import com.bwie.test.bean.LiebiaoBean; import io.reactivex.Observable; public class LiebiaoApi { private static LiebiaoApi liebiaoApi; private LiebiaoService liebiaoService; public LiebiaoApi(LiebiaoService liebiaoService) { this.liebiaoService = liebiaoService; } public static LiebiaoApi getLiebiao(LiebiaoService liebiaoService){ if (liebiaoApi==null){ liebiaoApi=new LiebiaoApi(liebiaoService); } return liebiaoApi; } public ObservablegetSerrvice(){ return liebiaoService.getLieService(); } }
net文件夹下IBase
public interface IBase { int getContentLayout(); void inject(); }
GlideImageLoader
import android.content.Context; import android.net.Uri; import android.widget.ImageView; import com.facebook.drawee.view.SimpleDraweeView; import com.youth.banner.loader.ImageLoader; public class GlideImageLoader extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { Uri uri=Uri.parse((String) path); imageView.setImageURI(uri); } @Override public ImageView createImageView(Context context) { return new SimpleDraweeView(context); } }
bean文件夹下HomePageBean
import java.util.List; public class HomePageBean { private int errorCode; private String errorMsg; private Listdata; public int getErrorCode() { return errorCode; } public void setErrorCode(int errorCode) { this.errorCode = errorCode; } public String getErrorMsg() { return errorMsg; } public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } public List getData() { return data; } public void setData(List data) { this.data = data; } public static class DataBean { private String desc; private int id; private String imagePath; private int isVisible; private int order; private String title; private int type; private String url; public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getImagePath() { return imagePath; } public void setImagePath(String imagePath) { this.imagePath = imagePath; } public int getIsVisible() { return isVisible; } public void setIsVisible(int isVisible) { this.isVisible = isVisible; } public int getOrder() { return order; } public void setOrder(int order) { this.order = order; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getType() { return type; } public void setType(int type) { this.type = type; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } }
LiebiaoBean
import java.util.List; public class LiebiaoBean { private DataBean data; private int errorCode; private String errorMsg; public DataBean getData() { return data; } public void setData(DataBean data) { this.data = data; } public int getErrorCode() { return errorCode; } public void setErrorCode(int errorCode) { this.errorCode = errorCode; } public String getErrorMsg() { return errorMsg; } public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } public static class DataBean { private int curPage; private int offset; private boolean over; private int pageCount; private int size; private int total; private Listdatas; public int getCurPage() { return curPage; } public void setCurPage(int curPage) { this.curPage = curPage; } public int getOffset() { return offset; } public void setOffset(int offset) { this.offset = offset; } public boolean isOver() { return over; } public void setOver(boolean over) { this.over = over; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public List getDatas() { return datas; } public void setDatas(List datas) { this.datas = datas; } public static class DatasBean { private String apkLink; private String author; private int chapterId; private String chapterName; private boolean collect; private int courseId; private String desc; private String envelopePic; private boolean fresh; private int id; private String link; private String niceDate; private String origin; private String projectLink; private long publishTime; private int superChapterId; private String superChapterName; private String title; private int type; private int userId; private int visible; private int zan; private List> tags; public String getApkLink() { return apkLink; } public void setApkLink(String apkLink) { this.apkLink = apkLink; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getChapterId() { return chapterId; } public void setChapterId(int chapterId) { this.chapterId = chapterId; } public String getChapterName() { return chapterName; } public void setChapterName(String chapterName) { this.chapterName = chapterName; } public boolean isCollect() { return collect; } public void setCollect(boolean collect) { this.collect = collect; } public int getCourseId() { return courseId; } public void setCourseId(int courseId) { this.courseId = courseId; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getEnvelopePic() { return envelopePic; } public void setEnvelopePic(String envelopePic) { this.envelopePic = envelopePic; } public boolean isFresh() { return fresh; } public void setFresh(boolean fresh) { this.fresh = fresh; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLink() { return link; } public void setLink(String link) { this.link = link; } public String getNiceDate() { return niceDate; } public void setNiceDate(String niceDate) { this.niceDate = niceDate; } public String getOrigin() { return origin; } public void setOrigin(String origin) { this.origin = origin; } public String getProjectLink() { return projectLink; } public void setProjectLink(String projectLink) { this.projectLink = projectLink; } public long getPublishTime() { return publishTime; } public void setPublishTime(long publishTime) { this.publishTime = publishTime; } public int getSuperChapterId() { return superChapterId; } public void setSuperChapterId(int superChapterId) { this.superChapterId = superChapterId; } public String getSuperChapterName() { return superChapterName; } public void setSuperChapterName(String superChapterName) { this.superChapterName = superChapterName; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getType() { return type; } public void setType(int type) { this.type = type; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public int getVisible() { return visible; } public void setVisible(int visible) { this.visible = visible; } public int getZan() { return zan; } public void setZan(int zan) { this.zan = zan; } public List> getTags() { return tags; } public void setTags(List> tags) { this.tags = tags; } } } }