仿京东分类

工具类

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



猜你喜欢

转载自blog.csdn.net/lucky_7777777/article/details/80189104