分类列表

##分类布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:background="#12000000"
    android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rc1"
        android:layout_width="0dp"
        android:layout_weight="3"
        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rc2"
        android:layout_width="0dp"
        android:layout_weight="7"
        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>

##契约类

public interface ClaContract {
    abstract class ClaPresenter{
        public abstract void getLeftlist(HashMap<String,String> map);
        public abstract void getRightlist(HashMap<String,String> map);
    }
    public interface IClaModel{
        void getLeftlist(HashMap<String,String> map, ClaModelCallback claModelCallback);
        void getRightlist(HashMap<String,String> map, ClaModelCallback claModelCallback);
    }
    public interface IClaView{
        void leftSuccess(LeftBean leftBean);
        void rightSuccess(RightBean rightBean);
        void leftFail(String error);
        void rightFail(String error);
    }
}

##model

public class ClaModel implements ClaContract.IClaModel {

    @Override
    public void getLeftlist(HashMap<String, String> map, final ClaModelCallback claModelCallback) {
        OkhttpUtils.getInstance().Get(UserApi.Left_API, new OkhttpCallback() {
            @Override
            public void onFailok(String msg) {
                if (claModelCallback!=null) {
                    claModelCallback.leftFailure("请求错误");
                }
            }

            @Override
            public void onSuccessok(String result) {
                if (claModelCallback!=null){
                    claModelCallback.leftSuccess(result);
                }
            }
        });
    }

    @Override
    public void getRightlist(HashMap<String, String> map, final ClaModelCallback claModelCallback) {
        OkhttpUtils.getInstance().Post(UserApi.RIGHT_API, map, new OkhttpCallback() {
            @Override
            public void onFailok(String msg) {
                if (claModelCallback!=null) {
                    claModelCallback.leftFailure("请求错误");
                }
            }

            @Override
            public void onSuccessok(String result) {
                if (claModelCallback!=null){
                    claModelCallback.leftSuccess(result);
                }
            }
        });
    }
}

##presenter

public class ClaPersenter extends ClaContract.ClaPresenter {
    private ClaModel claModel;
    private ClaContract.IClaView iClaView;

    public ClaPersenter(ClaContract.IClaView iClaView) {
        this.claModel = new ClaModel();
        this.iClaView = iClaView;
    }

    @Override
    public void getLeftlist(HashMap<String, String> map) {
        claModel.getLeftlist(map, new ClaModelCallback() {
            @Override
            public void leftSuccess(String result) {
                LeftBean leftBean = new Gson().fromJson(result, LeftBean.class);
                //List<LeftBean.LeftData> data = leftBean.data;
                iClaView.leftSuccess(leftBean);
            }

            @Override
            public void rightSUccess(String result) {

            }

            @Override
            public void leftFailure(String error) {

            }

            @Override
            public void rightFailure(String error) {

            }
        });
    }

    @Override
    public void getRightlist(HashMap<String, String> map) {
        claModel.getRightlist(map, new ClaModelCallback() {
            @Override
            public void leftSuccess(String result) {
                RightBean rightBean = new Gson().fromJson(result, RightBean.class);
               /* List<RightBean.RightData> data = rightBean.data;*/
                iClaView.rightSuccess(rightBean);
            }

            @Override
            public void rightSUccess(String result) {

            }

            @Override
            public void leftFailure(String error) {

            }

            @Override
            public void rightFailure(String error) {

            }
        });
    }

##ok接口

public interface OkhttpCallback {
    void onFailok(String msg);
    void onSuccessok(String result);
}

##分类接口

public interface ClaModelCallback {
    void leftSuccess(String result);
    void rightSUccess(String result);
    void leftFailure(String error);
    void rightFailure(String error);
}

##okutil

public class OkhttpUtils {
    Handler handler = new Handler();
    private static OkhttpUtils instance;
    private final OkHttpClient okHttpClient;

    private OkhttpUtils() {
        //拦截器
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(httpLoggingInterceptor)
                .writeTimeout(5,TimeUnit.SECONDS)
                .connectTimeout(5,TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .build();
    }
    public void Post(String url , HashMap<String,String> map, final OkhttpCallback callback){
        FormBody.Builder formBody = new FormBody.Builder();
        for (Map.Entry<String, String> p : map.entrySet()) {
            formBody.add(p.getKey(),p.getValue());
        }
        Request request = new Request.Builder()
                .url(url)
                .post(formBody.build())
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                if (callback!=null) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callback.onFailok("网络异常");
                        }
                    });

                }
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String string = response.body().string();
                if (callback!=null) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callback.onSuccessok(string);
                        }
                    });

                }
            }
        });
    }
    public void Get(String url, final OkhttpCallback callback){
        Request request = new Request.Builder()
                .url(url)
                .get()
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                if (callback!=null) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callback.onFailok("网络异常");
                        }
                    });
                }
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String string = response.body().string();
                if (callback!=null) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callback.onSuccessok(string);
                        }
                    });
                }
            }
        });
    }
    public static OkhttpUtils getInstance(){
        if (instance==null){
            synchronized (OkhttpUtils.class){
                if (instance==null){
                    instance = new OkhttpUtils();
                }
            }
        }
        return instance;
    }
    /**
     * 取消所有请求,好处:节省开销:内存开销,cpu的开销(线程开销)
     */
    public void cancel(){

        if (okHttpClient!=null){
            okHttpClient.dispatcher().cancelAll();
        }
    }
}

##left adapter

public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.LeftViewHolder> {
    private Context context;
    private List<LeftBean.LeftData> list;

    public LeftAdapter(Context context, List<LeftBean.LeftData> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public LeftViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.left_layout, viewGroup, false);
        LeftViewHolder leftViewHolder = new LeftViewHolder(inflate);
        return leftViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull LeftViewHolder leftViewHolder, int i) {
        final LeftBean.LeftData leftData = list.get(i);
        leftViewHolder.name.setText(leftData.name);
        leftViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (itemclickCallback!=null){
                    itemclickCallback.click(leftData.cid);
                    Log.e("11",leftData.cid+"");
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return list==null?0:list.size();
    }

    class LeftViewHolder extends RecyclerView.ViewHolder{
        TextView name;
        public LeftViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name);
        }
    }
    private ItemclickCallback itemclickCallback;

    public void setItemclickCallback(ItemclickCallback itemclickCallback) {
        this.itemclickCallback = itemclickCallback;
    }

    public interface ItemclickCallback{
        void click(String cid1);
    }
}

##right adapter

public class RightAdapter extends RecyclerView.Adapter<RightAdapter.RightViewHolder> {
    private Context context;
    private List<RightBean.RightData> list;



    public RightAdapter(Context context, List<RightBean.RightData> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public RightViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.right_layout, viewGroup, false);
        RightViewHolder rightViewHolder = new RightViewHolder(inflate);
        return rightViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull RightViewHolder rightViewHolder, int i) {
        RightBean.RightData rightData = list.get(i);

        rightViewHolder.name.setText(rightData.name);
        rightViewHolder.right_rc.setLayoutManager(new GridLayoutManager(context,3));
        RightitemAdapter rightitemAdapter = new RightitemAdapter(context,list.get(i).list);
        rightViewHolder.right_rc.setAdapter(rightitemAdapter);
    }

    @Override
    public int getItemCount() {
        return list==null?0:list.size();
    }

    class RightViewHolder extends RecyclerView.ViewHolder{
        TextView name;
        RecyclerView right_rc;
        public RightViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name);
            right_rc = itemView.findViewById(R.id.right_rc);
        }
    }
}

##right item adapter

public class RightitemAdapter extends RecyclerView.Adapter<RightitemAdapter.RightViewHolder> {
    private Context context;
    private List<RightBean.RightData.RightList> list;

    public RightitemAdapter(Context context, List<RightBean.RightData.RightList> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public RightViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.right_item_layout, viewGroup, false);
        RightViewHolder rightViewHolder = new RightViewHolder(inflate);
        return rightViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull RightViewHolder rightViewHolder, int i) {
        RightBean.RightData.RightList rightData = list.get(i);
        rightViewHolder.name.setText(rightData.name);
        Glide.with(context).load(rightData.icon).into(rightViewHolder.img);

    }

    @Override
    public int getItemCount() {
        return list==null?0:list.size();
    }

    class RightViewHolder extends RecyclerView.ViewHolder{
        TextView name;
        ImageView img;
        public RightViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name);
            img = itemView.findViewById(R.id.img);
        }
    }
}

##分类fragment

public class ClaFragment extends Fragment implements ClaContract.IClaView,LeftAdapter.ItemclickCallback{
    @BindView(R.id.rc1)
    RecyclerView rc1;
    @BindView(R.id.rc2)
    RecyclerView rc2;
    private ClaPersenter claPersenter;
    private String cid = "1";
    private LeftAdapter leftAdapter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.cla_fragment, container, false);
        ButterKnife.bind(this,view);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        initData();
    }


    private void initData() {
        rc1.setLayoutManager(new LinearLayoutManager(getActivity()));
        rc2.setLayoutManager(new LinearLayoutManager(getActivity()));
        claPersenter = new ClaPersenter(this);
        claPersenter.getLeftlist(new HashMap<String,String>());
        getRight();
    }

    private void getRight() {
        HashMap<String,String> map = new HashMap<>();
        map.put("cid",cid);
        Log.e("right",cid+"");
        claPersenter.getRightlist(map);
    }

    @Override
    public void leftSuccess(LeftBean leftBean) {
            if (leftAdapter==null) {
                leftAdapter = new LeftAdapter(getActivity(), leftBean.data);
                rc1.setAdapter(leftAdapter);
                leftAdapter.setItemclickCallback(this);
            }else {
                leftAdapter.notifyDataSetChanged();
            }

    }

    @Override
    public void rightSuccess(RightBean rightBean) {
        RightAdapter rightAdapter = new RightAdapter(getActivity(),rightBean.data);
        rc2.setAdapter(rightAdapter);
    }

    @Override
    public void leftFail(String error) {
        Toast.makeText(getActivity(),"left请求错误",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void rightFail(String error) {
        Toast.makeText(getActivity(),"right请求错误",Toast.LENGTH_SHORT).show();
    }

    /**
     * 左边的点击事件
     */


    @Override
    public void click(String cid1) {
        cid = cid1;
        getRight();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44022413/article/details/85949530