定义一个接口HomPageContract
public interface HomPageContract { interface View extends BaseContract.BaseView{ void getAdSuccess(AdBean adBean); void getCatagorySuccess(CatagoryBean catagoryBean); } interface Presenter extends BaseContract.BasePresenter<View>{ void getAd(); void getCatagory(); } }
写一个HomePagePresenter类
public class HomePagePresenter extends BasePresenter<HomPageContract.View> implements HomPageContract.Presenter { private AdApi adApi; private CatagoryApi catagoryApi; @Inject public HomePagePresenter(AdApi adApi, CatagoryApi catagoryApi) { this.adApi = adApi; this.catagoryApi = catagoryApi; } @Override public void getAd() { adApi.getAd() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer<AdBean>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(AdBean adBean) { mView.getAdSuccess(adBean); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } @Override public void getCatagory() { catagoryApi.getCatagory() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer<CatagoryBean>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(CatagoryBean catagoryBean) { mView.getCatagorySuccess(catagoryBean); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } }
主页面
public class HomePageFragment extends BaseFragment<HomePagePresenter> implements HomPageContract.View { private Banner banner; private RecyclerView rvClass; private MarqueeView marqueeView; private RecyclerView rvSecKill; private RecyclerView rvRecommend; private ImageView ivZxing; @Override public int getContentLayout() { return R.layout.fragment_home; } @Override public void inject() { DaggerHttpComponent.builder() .httpModule(new HttpModule()) .build() .inject(this); } @Override public void initView(View view) { marqueeView = view.findViewById(R.id.marqueeView); List<String> info = new ArrayList<>(); info.add("1. 大家好,我是孙福生。"); info.add("2. 欢迎大家关注我哦!"); info.add("3. GitHub帐号:sfsheng0322"); info.add("4. 新浪微博:孙福生微博"); info.add("5. 个人博客:sunfusheng.com"); info.add("6. 微信公众号:孙福生"); marqueeView.startWithList(info); banner = (Banner) view.findViewById(R.id.banner); rvClass = view.findViewById(R.id.rvClass); //设置布局管理器 GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2, RecyclerView.HORIZONTAL, false); rvClass.setLayoutManager(gridLayoutManager); rvSecKill = view.findViewById(R.id.rvSecKill); //设置布局管理器 GridLayoutManager gridLayoutManager1 = new GridLayoutManager(getContext(), 1, RecyclerView.HORIZONTAL, false); rvSecKill.setLayoutManager(gridLayoutManager1); //设置布局管理器 rvRecommend = view.findViewById(R.id.rvRecommend); GridLayoutManager gridLayoutManager2 = new GridLayoutManager(getContext(), 2, RecyclerView.VERTICAL, false); rvRecommend.setLayoutManager(gridLayoutManager2); //设置图片加载器 banner.setImageLoader(new GlideImageLoader()); //二维码 ivZxing = view.findViewById(R.id.ivZxing); ivZxing.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getContext(), CaptureActivity.class); startActivityForResult(intent, 1); } }); //请求数据 initData(); } private void initData() { mPresenter.getAd(); mPresenter.getCatagory(); } @Override public void getAdSuccess(final AdBean adBean) { List<AdBean.DataBean> data = adBean.getData(); List<String> images = new ArrayList<>(); for (int i = 0; i < data.size(); i++) { images.add(data.get(i).getIcon()); } //设置图片集合 banner.setImages(images); //banner设置方法全部调用完毕时最后调用 banner.start(); RvSecKillAdapter rvSecKillAdapter = new RvSecKillAdapter(getActivity(), adBean.getMiaosha().getList()); rvSecKill.setAdapter(rvSecKillAdapter); rvSecKillAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(int position) { //跳转显示详情 //获取地址 String detailUrl = adBean.getMiaosha().getList().get(position).getDetailUrl(); Intent intent = new Intent(getContext(), WebViewActivity.class); intent.putExtra("detailUrl", detailUrl); startActivity(intent); } @Override public void onLongItemClick(int position) { } }); RvRecommendAdapter rvRecommendAdapter = new RvRecommendAdapter(getActivity(), adBean.getTuijian().getList()); rvRecommend.setAdapter(rvRecommendAdapter); } @Override public void onDestroy() { super.onDestroy(); //结束轮播 banner.stopAutoPlay(); } public void getCatagorySuccess(CatagoryBean catagoryBean) { final List<CatagoryBean.DataBean> data = catagoryBean.getData(); RvClassAdapter rvClassAdapter = new RvClassAdapter(getContext(),data); rvClass.setAdapter(rvClassAdapter); rvClassAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(int position) { Toast.makeText(getContext(), data.get(position).getName(), Toast.LENGTH_SHORT).show(); } @Override public void onLongItemClick(int position) { } }); } }
写一个适配器RvClassAdapter
public class RvClassAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<CatagoryBean.DataBean> list; private LayoutInflater inflater; private OnItemClickListener onItemClickListener; public RvClassAdapter(Context context, List<CatagoryBean.DataBean> list) { this.context = context; this.list = list; inflater = LayoutInflater.from(context); } public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener = onItemClickListener; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.rvclass_item, parent, false); ClassViewHoler classViewHoler = new ClassViewHoler(view); return classViewHoler; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { ClassViewHoler classViewHoler = (ClassViewHoler) holder; CatagoryBean.DataBean dataBean = list.get(position); classViewHoler.iv.setImageURI(dataBean.getIcon()); classViewHoler.tv.setText(dataBean.getName()); classViewHoler.ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (onItemClickListener != null) { onItemClickListener.onItemClick(position); } } }); } @Override public int getItemCount() { return list.size(); } class ClassViewHoler extends RecyclerView.ViewHolder{ private final SimpleDraweeView iv; private final TextView tv; private final LinearLayout ll; public ClassViewHoler(View itemView) { super(itemView); iv = itemView.findViewById(R.id.iv); tv = itemView.findViewById(R.id.tv); ll = itemView.findViewById(R.id.ll); } } }
RvRecommendAdapter适配器
public class RvRecommendAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<AdBean.TuijianBean.ListBean> list; private LayoutInflater inflater; private OnItemClickListener onItemClickListener; public RvRecommendAdapter(Context context, List<AdBean.TuijianBean.ListBean> list) { this.context = context; this.list = list; inflater = LayoutInflater.from(context); } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.rvrecommend_item, parent, false); RecommendViewHolder recommendViewHolder = new RecommendViewHolder(view); return recommendViewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { RecommendViewHolder recommendViewHolder = (RecommendViewHolder) holder; AdBean.TuijianBean.ListBean listBean = list.get(position); String images = listBean.getImages(); String[] split = images.split("\\|"); String url = split.length == 0 ? images : split[0]; recommendViewHolder.iv.setImageURI(url); recommendViewHolder.tv.setText(listBean.getTitle()); } @Override public int getItemCount() { return list.size(); } class RecommendViewHolder extends RecyclerView.ViewHolder { private final SimpleDraweeView iv; private final TextView tv; public RecommendViewHolder(View itemView) { super(itemView); iv = itemView.findViewById(R.id.iv); tv = itemView.findViewById(R.id.tv); } }
}
RvSecKillAdapter适配器
public class RvSecKillAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<AdBean.MiaoshaBean.ListBeanX> list; private LayoutInflater inflater; private OnItemClickListener onItemClickListener; public RvSecKillAdapter(Context context, List<AdBean.MiaoshaBean.ListBeanX> list) { this.context = context; this.list = list; inflater = LayoutInflater.from(context); } public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener = onItemClickListener; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.rvseckill_item, parent, false); SecKillViewHolder secKillViewHolder = new SecKillViewHolder(view); return secKillViewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { SecKillViewHolder secKillViewHolder = (SecKillViewHolder) holder; AdBean.MiaoshaBean.ListBeanX listBeanX = list.get(position); String url = listBeanX.getImages().split("\\|")[0]; secKillViewHolder.iv.setImageURI(url); secKillViewHolder.iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onItemClickListener!=null){ onItemClickListener.onItemClick(position); } } }); } @Override public int getItemCount() { return list.size(); } class SecKillViewHolder extends RecyclerView.ViewHolder{ private final SimpleDraweeView iv; public SecKillViewHolder(View itemView) { super(itemView); iv = itemView.findViewById(R.id.iv); } } }适配器布局
rvclass_item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:gravity="center" android:orientation="vertical"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/iv" android:layout_width="50dp" android:layout_height="50dp"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>rvrecommend_item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical" android:padding="10dp"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/iv" android:layout_width="200dp" android:layout_height="200dp"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>rvseckill_item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:padding="10dp" android:layout_height="wrap_content"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/iv" android:layout_width="90dp" android:layout_height="90dp"/> </LinearLayout>