工具类
package com.example.com.moni.utils; import com.example.com.moni.api.ApiService; import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by len on 2018/4/29. */ public class HttpUtils { //创建单例 private static volatile HttpUtils instance; private final Retrofit retrofit; //提供无参构造 public HttpUtils(String url){ //创建retrofit对象 retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); } //创建单例 防止内存泄漏 public static HttpUtils getInstance(String url) { //判断 if(instance==null){ synchronized (HttpUtils.class){ if(null==instance){ instance=new HttpUtils(url); } } } return instance; } //定义得到apiservice的方法 public ApiService getApiService(){ return retrofit.create(ApiService.class); } }
ApiService------
/** * 首页 * * https://www.zhaoapi.cn/product/getCatagory * @return */ @GET("product/getCatagory") Flowable<HaredTopBean> getHadTopService();
/** * 右边recyiew * https://www.zhaoapi.cn/product/getProductCatagory */ @GET("product/getProductCatagory") Flowable<RightRecyBean> getRightRecyService(@Query("cid") String cid);
BaseUrl代码----------
public static final String TOP_URL="https://www.zhaoapi.cn/"; public static final String RIGHT_RECY_URL="https://www.zhaoapi.cn/";
分类布局-----------
<?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="horizontal"> <!--左边--> <android.support.v7.widget.RecyclerView android:layout_width="0dp" android:layout_weight="2" android:layout_height="match_parent" android:id="@+id/left_recyview" android:background="#F0F0F0" ></android.support.v7.widget.RecyclerView> <!--右边--> <android.support.v7.widget.RecyclerView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="8" android:id="@+id/right_recyview" android:background="#fff"></android.support.v7.widget.RecyclerView> </LinearLayout>
分类左边布局----------
<?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:layout_gravity="center_horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/left_text" android:layout_marginLeft="10dp" android:layout_marginTop="20dp" android:text="111" /> </LinearLayout>
分类右边布局----------
<?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:layout_width="match_parent" android:layout_height="wrap_content" android:text="1111" android:id="@+id/right_recy_text" android:padding="10dp" android:background="#F0F0F0" />
<!--自定义布局-->< com.example.com.moni.MyGridView android :layout_width= "match_parent" android :layout_height= "wrap_content" android :id= "@+id/grid" android :numColumns= "3"></ com.example.com.moni.MyGridView></ LinearLayout>
MyGridView布局---------------
<?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"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/right_grid_img"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="111" android:id="@+id/right_grid_text"/> </LinearLayout>
自定义GridView代码------------
package com.example.com.moni; import android.content.Context; import android.content.Intent; import android.util.AttributeSet; import android.widget.GridView; /** * Created by len on 2018/5/2. */ public class MyGridView extends GridView{ public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } //自定义宽高 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int i = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, i); } }
Fragment2(分类代码)-------------
package com.example.com.moni.fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.com.moni.R; import com.example.com.moni.adapter.LeftRecyAdapter; import com.example.com.moni.adapter.RightRecyAdapter; import com.example.com.moni.bean.HaredTopBean; import com.example.com.moni.bean.RightRecyBean; import com.example.com.moni.presenter.RecyRightPresenter; import com.example.com.moni.presenter.RecyTopPresenter; import com.example.com.moni.view.IRecyRightView; import com.example.com.moni.view.ITopView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; /** * Created by len on 2018/4/29. */ public class Fragment2 extends Fragment implements ITopView, LeftRecyAdapter.SetClick, IRecyRightView { private RecyclerView leftRecyview; private RecyclerView rightRecyview; private List<RightRecyBean.DataBean> rightList; private List<RightRecyBean.DataBean> list = new ArrayList<>(); private RecyRightPresenter recyRightPresenter; private LeftRecyAdapter ladapter; private List<HaredTopBean.DataBean> data; private RightRecyAdapter radapter; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment02, container, false); //注册 EventBus.getDefault().register(this); //找到控件 leftRecyview = view.findViewById(R.id.left_recyview); rightRecyview = view.findViewById(R.id.right_recyview); //调用p层方法(左边) RecyTopPresenter recyTopPresenter = new RecyTopPresenter(this); recyTopPresenter.getTopMdata(); //调用p层方法(右边) recyRightPresenter = new RecyRightPresenter(this); recyRightPresenter.getRMdata(1 + ""); // ladapter.getClick(this); //设置控制器 LinearLayoutManager manager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); rightRecyview.setLayoutManager(manager); //添加分割线 DividerItemDecoration itemDecoration = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL); rightRecyview.addItemDecoration(itemDecoration); return view; } @Override public void Tsuccess(HaredTopBean haredTopBean) { data = haredTopBean.getData(); //设置控制器 LinearLayoutManager manager = new LinearLayoutManager(getActivity()); leftRecyview.setLayoutManager(manager); //添加分割线 //设置适配器 ladapter = new LeftRecyAdapter(getActivity(), data); leftRecyview.setAdapter(ladapter); ladapter.getClick(Fragment2.this); } //实现适配器接口点击方法 @Override public void itemClick(int i) { //得到cid int cid = data.get(i).getCid(); //获取当前的索引 int myposition = i; //传到适配器 (调用适配器方法) ladapter.getIndex(myposition); //刷新适配器 ladapter.notifyDataSetChanged(); //发送事件 EventBus.getDefault().post(cid + ""); } //订阅事件 @Subscribe(threadMode = ThreadMode.MAIN) public void getCid(String cid) { recyRightPresenter.getRMdata(cid); } //注销eventBus @Override public void onDestroyView() { super.onDestroyView(); EventBus.getDefault().unregister(this); } //得到数据(右边) @Override public void RightData(RightRecyBean rightRecyBean) { rightList = rightRecyBean.getData(); //设置适配器 radapter = new RightRecyAdapter(getActivity(), rightList); rightRecyview.setAdapter(radapter); } }
左边Model层代码-------------
package com.example.com.moni.model; import com.example.com.moni.api.ApiService; import com.example.com.moni.api.BaseUrl; import com.example.com.moni.bean.HaredTopBean; import com.example.com.moni.bean.LunBoBean; import com.example.com.moni.presenter.ITopPresenter; import com.example.com.moni.presenter.RecyTopPresenter; import com.example.com.moni.utils.HttpUtils; import io.reactivex.Flowable; /** * Created by len on 2018/5/1. */ public class RecyTopModel { public void getTopData(ITopPresenter iTopPresenter) { //调用m层方法访问数据 ApiService apiService = HttpUtils.getInstance(BaseUrl.TOP_URL).getApiService(); Flowable<HaredTopBean> hadTopService = apiService.getHadTopService(); //把得到数据传给p iTopPresenter.success(hadTopService); } }
右边Model层代码-------------
public class RecyRightModel { //氢气数据方法 public void RMgetData(String cid,IRightPresenter iRightPresenter) { //调用工具类方法 ApiService apiService = HttpUtils.getInstance(BaseUrl.RIGHT_RECY_URL).getApiService(); Flowable<RightRecyBean> rightRecyService = apiService.getRightRecyService(cid); //把得到的数据传给p iRightPresenter.success(rightRecyService); } }
左边presenter层代码
public interface ITopPresenter { //定义成功方法 void success(Flowable<HaredTopBean> topService); }
右边presenter层代码
public interface IRightPresenter { //定义成功方法 void success(Flowable<RightRecyBean> rightRecyService); }左边view层代码
public interface ITopView { //定义成功方法 void Tsuccess(HaredTopBean haredTopBean); }
右边view层代码
public interface IRecyRightView { //定义得到数据方法 void RightData(RightRecyBean rightRecyBean); }
适配器代码(左边)--------------
package com.example.com.moni.adapter; import android.content.Context; import android.graphics.Color; import android.support.v4.app.FragmentActivity; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.com.moni.R; import com.example.com.moni.bean.HaredTopBean; import org.w3c.dom.Text; import java.util.List; /** * Created by len on 2018/5/1. */ public class LeftRecyAdapter extends RecyclerView.Adapter { Context context; List<HaredTopBean.DataBean> data; private LeftViewHolder leftViewHolder; private SetClick setClick; private int myposition; public LeftRecyAdapter(Context context, List<HaredTopBean.DataBean> data) { this.context=context; this.data=data; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=View.inflate(context,R.layout.left_recy_item,null); leftViewHolder = new LeftViewHolder(view); return leftViewHolder; } //定义个得到接口对象方法 public void getClick(SetClick setClick){ this.setClick=setClick; } //得到下标方法 public void getIndex(int myposition) { this.myposition=myposition; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { leftViewHolder= (LeftViewHolder) holder; //判断 if(position==myposition){ leftViewHolder.left_text.setTextColor(Color.RED); }else{ leftViewHolder.left_text.setTextColor(Color.GRAY); } //赋值 leftViewHolder.left_text.setText(data.get(position).getName()); leftViewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //点击事件 setClick.itemClick(position); notifyDataSetChanged(); } }); } @Override public int getItemCount() { return data.size(); } class LeftViewHolder extends RecyclerView.ViewHolder { private final TextView left_text; public LeftViewHolder(View itemView) { super(itemView); left_text = itemView.findViewById(R.id.left_text); } } //定义设置点击事件的接口 public interface SetClick{ //点击事件 void itemClick(int i); } }
适配器(右边)
package com.example.com.moni.adapter; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.support.v4.app.FragmentActivity; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.GridView; import android.widget.ListAdapter; import android.widget.TextView; import com.example.com.moni.R; import com.example.com.moni.ShopListActivity; import com.example.com.moni.bean.RightRecyBean; import com.facebook.drawee.view.SimpleDraweeView; import org.greenrobot.eventbus.EventBus; import java.util.List; /** * Created by len on 2018/5/2. */ public class RightRecyAdapter extends RecyclerView.Adapter { Context context; List<RightRecyBean.DataBean> rightList; public RightRecyAdapter(Context context, List<RightRecyBean.DataBean> rightList) { this.context=context; this.rightList=rightList; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(context).inflate(R.layout.right_recy_item,parent,false); RightViewHolder rightViewHolder= new RightViewHolder(view); return rightViewHolder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { RightViewHolder rightViewHolder= (RightViewHolder) holder; //赋值 rightViewHolder.right_text.setText(rightList.get(position).getName()); //位grid设置适配器 RightGridAdapter adapter=new RightGridAdapter(context,rightList.get(position).getList()); rightViewHolder.gridView.setAdapter(adapter); //设置点击事件 rightViewHolder.gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { int pscid = rightList.get(position).getList().get(i).getPscid(); //发送粘性事件 EventBus.getDefault().postSticky(pscid+""); //跳转到商品列表页面 Intent intent=new Intent(context, ShopListActivity.class); context.startActivity(intent); } }); } @Override public int getItemCount() { return rightList.size(); } class RightViewHolder extends RecyclerView.ViewHolder { private final TextView right_text; private final GridView gridView; public RightViewHolder(View itemView) { super(itemView); right_text = itemView.findViewById(R.id.right_recy_text); gridView = itemView.findViewById(R.id.grid); } } }