电商项目分类页面新框架

1.ClassifyContract

package com.example.jingdong.ui.classify.contract;

import com.example.jingdong.bean.CatagoryBean;
import com.example.jingdong.bean.ChildCataBean;
import com.example.jingdong.ui.base.BaseContract;

public interface ClassifyContract {

    interface View extends BaseContract.BaseView{
        void showCatagory(CatagoryBean catagoryBean);
        void showChildCatagory(ChildCataBean childCataBean);
    }

    interface Presenter extends BaseContract.BasePresenter<View>{
        void getCatagory();
        void getChildCatagory(String cid);
    }

}

2.ClassifyPresenter

package com.example.jingdong.ui.classify.presenter;

import com.example.jingdong.bean.CatagoryBean;
import com.example.jingdong.bean.ChildCataBean;
import com.example.jingdong.net.CatagoryApi;
import com.example.jingdong.net.ChildCatagoryApi;
import com.example.jingdong.ui.base.BasePresenter;
import com.example.jingdong.ui.classify.contract.ClassifyContract;

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 ClassifyPresenter extends BasePresenter<ClassifyContract.View> implements ClassifyContract.Presenter {

    private CatagoryApi catagoryApi;
    private ChildCatagoryApi childCatagoryApi;
    @Inject
    public ClassifyPresenter(CatagoryApi catagoryApi, ChildCatagoryApi childCatagoryApi) {
        this.catagoryApi = catagoryApi;
        this.childCatagoryApi = childCatagoryApi;
    }

    @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.showCatagory(catagoryBean);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @Override
    public void getChildCatagory(String cid) {
        childCatagoryApi.getChildCatagory(cid)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Observer<ChildCataBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(ChildCataBean childCataBean) {
                        mView.showChildCatagory(childCataBean);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

3.ClassifyFragment

package com.example.jingdong.ui.classify;

import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListView;
import android.widget.ImageView;

import com.example.jingdong.R;
import com.example.jingdong.bean.CatagoryBean;
import com.example.jingdong.bean.ChildCataBean;
import com.example.jingdong.component.DaggerHttpComponent;
import com.example.jingdong.inter.OnItemClickListener;
import com.example.jingdong.module.HttpModule;
import com.example.jingdong.ui.base.BaseFragment;
import com.example.jingdong.ui.classify.adapter.ElvAdapter;
import com.example.jingdong.ui.classify.adapter.RvLeftAdapter;
import com.example.jingdong.ui.classify.contract.ClassifyContract;
import com.example.jingdong.ui.classify.presenter.ClassifyPresenter;

import java.util.ArrayList;
import java.util.List;

public class ClassifyFragment extends BaseFragment<ClassifyPresenter> implements ClassifyContract.View {

    private ImageView ivZxing;
    private RecyclerView rvLeft;
    private ExpandableListView elv;

    @Override
    public int getContentLayout() {
        return R.layout.fragment_classify;
    }

    @Override
    public void inject() {
        DaggerHttpComponent.builder()
                .httpModule(new HttpModule())
                .build()
                .inject(this);
    }

    @Override
    public void initView(View view) {
        ivZxing = (ImageView) view.findViewById(R.id.ivZxing);
        rvLeft = (RecyclerView) view.findViewById(R.id.rvLeft);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
        rvLeft.setLayoutManager(linearLayoutManager);
        rvLeft.addItemDecoration(new DividerItemDecoration(getContext(),RecyclerView.VERTICAL));
        elv = (ExpandableListView) view.findViewById(R.id.elv);
        //显示左侧分类
        mPresenter.getCatagory();
    }

    //显示左侧分类
    @Override
    public void showCatagory(CatagoryBean catagoryBean) {
        final List<CatagoryBean.DataBean> dataBeans = catagoryBean.getData();
        final RvLeftAdapter rvLeftAdapter = new RvLeftAdapter(dataBeans, getContext());
        rvLeft.setAdapter(rvLeftAdapter);
        //默认选中第一个数据
        rvLeftAdapter.changeCheck(0,true);
        //默认显示第一个cid的子分类数据
        mPresenter.getChildCatagory(dataBeans.get(0).getCid()+"");
        //点击的监听
        rvLeftAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                rvLeftAdapter.changeCheck(position,true);
                int cid = dataBeans.get(position).getCid();
                mPresenter.getChildCatagory(cid+"");
            }

            @Override
            public void onItemLongClick(int position) {

            }
        });
    }

    @Override
    public void showChildCatagory(ChildCataBean childCataBean) {
        //定义数组存放数据
        List<String> list_group = new ArrayList<>();
        ArrayList<List<ChildCataBean.DataBean.ListBean>> child_lists = new ArrayList<>();
        //添加分组的数据
        List<ChildCataBean.DataBean> data = childCataBean.getData();

        for (int i = 0; i < data.size(); i++) {
            list_group.add(data.get(i).getName());
            child_lists.add(data.get(i).getList());
        }
        //设置适配器
        ElvAdapter elvAdapter = new ElvAdapter(list_group, child_lists, getContext());
        elv.setAdapter(elvAdapter);
        //默认展开列表
        for (int i = 0; i < list_group.size(); i++) {
            elv.expandGroup(i);
        }
        //隐藏父布局图标
        elv.setGroupIndicator(null);
        //设置点击禁止打开关闭
        elv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                return true;
            }
        });
    }


}

4.CatagoryApiService

package com.example.jingdong.net;

import com.example.jingdong.bean.CatagoryBean;

import io.reactivex.Observable;
import retrofit2.http.GET;

public interface CatagoryApiService {
    @GET("product/getCatagory")
    Observable<CatagoryBean> getCatagory();

}

5.CatagoryApi

package com.example.jingdong.net;

import com.example.jingdong.bean.CatagoryBean;

import io.reactivex.Observable;

public class CatagoryApi {
    private static CatagoryApi catagoryApi;
    private CatagoryApiService catagoryApiService;

    private CatagoryApi(CatagoryApiService catagoryApiService) {
        this.catagoryApiService = catagoryApiService;
    }

    public static CatagoryApi getCatagoryApi(CatagoryApiService catagoryApiService){
        if (catagoryApi==null){
            catagoryApi=new CatagoryApi(catagoryApiService);
        }
        return catagoryApi;
    }

    public Observable<CatagoryBean> getCatagory(){
        return catagoryApiService.getCatagory();
    }

}

6.ChildCatagoryApiService

package com.example.jingdong.net;

import com.example.jingdong.bean.ChildCataBean;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

public interface ChildCatagoryApiService {

    @FormUrlEncoded
    @POST("product/getProductCatagory")
    Observable<ChildCataBean> getChildCatagory(@Field("cid") String cid);

}

7.ChildCatagoryApi

package com.example.jingdong.net;

import com.example.jingdong.bean.ChildCataBean;

import io.reactivex.Observable;

public class ChildCatagoryApi {

    private ChildCatagoryApiService childCatagoryApiService;
    private static ChildCatagoryApi childCatagoryApi;

    private ChildCatagoryApi(ChildCatagoryApiService childCatagoryApiService) {
        this.childCatagoryApiService = childCatagoryApiService;
    }

    public static ChildCatagoryApi getChildCatagoryApi(ChildCatagoryApiService childCatagoryApiService){
        if (childCatagoryApi==null){
            childCatagoryApi=new ChildCatagoryApi(childCatagoryApiService);
        }
        return childCatagoryApi;
    }

    public Observable<ChildCataBean> getChildCatagory(String cid){
        return childCatagoryApiService.getChildCatagory(cid);
    }

}

8.HttpModule

package com.example.jingdong.module;

import com.example.jingdong.net.AdApi;
import com.example.jingdong.net.AdApiService;
import com.example.jingdong.net.Api;
import com.example.jingdong.net.CatagoryApi;
import com.example.jingdong.net.CatagoryApiService;
import com.example.jingdong.net.ChildCatagoryApi;
import com.example.jingdong.net.ChildCatagoryApiService;
import com.example.jingdong.net.MyInterceptor;
import com.example.jingdong.net.NetApi;
import com.example.jingdong.net.NetApiService;

import java.sql.Time;
import java.util.concurrent.TimeUnit;

import dagger.Module;
import dagger.Provides;
import io.reactivex.android.schedulers.AndroidSchedulers;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

@Module
public class HttpModule {

    @Provides
    OkHttpClient.Builder provideOkHttpClientBuilder(){
        return new OkHttpClient.Builder()
                .readTimeout(20, TimeUnit.SECONDS)
                .writeTimeout(20, TimeUnit.SECONDS)
                .connectTimeout(10,TimeUnit.SECONDS)
                .addInterceptor(new MyInterceptor());
    }

    @Provides
    AdApi provideAdApi(OkHttpClient.Builder builder){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Api.BASEURL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(builder.build())
                .build();
        AdApiService adApiService = retrofit.create(AdApiService.class);
        return AdApi.getAdApi(adApiService);
    }

    @Provides
    CatagoryApi provideCatagoryApi(OkHttpClient.Builder builder){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Api.BASEURL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(builder.build())
                .build();
        CatagoryApiService catagoryApiService = retrofit.create(CatagoryApiService.class);
        return CatagoryApi.getCatagoryApi(catagoryApiService);
    }

    @Provides
    ChildCatagoryApi provideChildCatagoryApi(OkHttpClient.Builder builder){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Api.BASEURL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(builder.build())
                .build();
        ChildCatagoryApiService childCatagoryApiService = retrofit.create(ChildCatagoryApiService.class);
        return ChildCatagoryApi.getChildCatagoryApi(childCatagoryApiService);
    }

    @Provides
    NetApi provideNetApi(OkHttpClient.Builder builder){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Api.BASEURL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(builder.build())
                .build();
        NetApiService netApiService = retrofit.create(NetApiService.class);
        return NetApi.getNetApi(netApiService);
    }


}

9.HttpComponent

package com.example.jingdong.component;

import com.example.jingdong.activity.GoodsListActivity;
import com.example.jingdong.activity.ListDetailsActivity;
import com.example.jingdong.activity.LoginActivity;
import com.example.jingdong.module.HttpModule;
import com.example.jingdong.ui.classify.ClassifyFragment;
import com.example.jingdong.ui.homepage.HomePageFragment;
import com.example.jingdong.ui.shopcar.ShopCarFragment;

import dagger.Component;

@Component(modules = HttpModule.class)
public interface HttpComponent {

    void inject(HomePageFragment homePageFragment);

    void inject(ClassifyFragment classifyFragment);

    void inject(GoodsListActivity goodsListActivity);

    void inject(LoginActivity loginActivity);

    void inject(ListDetailsActivity listDetailsActivity);

    void inject(ShopCarFragment shopCarFragment);

}

10.左面适配器RvLeftAdapter

package com.example.jingdong.ui.classify.adapter;

import android.content.Context;
import android.graphics.Color;
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.TextView;

import com.example.jingdong.R;
import com.example.jingdong.bean.CatagoryBean;
import com.example.jingdong.inter.OnItemClickListener;


import java.util.List;

public class RvLeftAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private OnItemClickListener onItemClickListener;
    private List<CatagoryBean.DataBean> list;
    private Context context;
    private LayoutInflater inflater;

    public RvLeftAdapter(List<CatagoryBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
        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.rvleft_item, parent, false);
        RvLeftViewHolder rvLeftViewHolder=new RvLeftViewHolder(view);
        return rvLeftViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
        RvLeftViewHolder rvLeftViewHolder= (RvLeftViewHolder) holder;
        rvLeftViewHolder.tv_left.setText(list.get(position).getName());

        if (list.get(position).isChecked()){
            rvLeftViewHolder.tv_left.setTextColor(Color.RED);
            rvLeftViewHolder.tv_left.setBackgroundColor(Color.parseColor("#F3F5F7"));
        }else {
            rvLeftViewHolder.tv_left.setTextColor(Color.BLACK);
            rvLeftViewHolder.tv_left.setBackgroundColor(Color.WHITE);
        }

        //点击的监听
        rvLeftViewHolder.tv_left.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onItemClickListener!=null){
                    onItemClickListener.onItemClick(position);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class RvLeftViewHolder extends RecyclerView.ViewHolder {
        TextView tv_left;
        public RvLeftViewHolder(View itemView) {
            super(itemView);
            tv_left=itemView.findViewById(R.id.tv_left);
        }
    }


    public void changeCheck(int postion,boolean bool){
        for (int i = 0; i < list.size(); i++) {
            list.get(i).setChecked(false);
        }
        list.get(postion).setChecked(bool);
        notifyDataSetChanged();
    }
}

11右面recycleview的适配器,更改了一下,右面没有用ExpandableListView

package com.example.day12_fenlei.ui.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.day12_fenlei.R;
import com.example.day12_fenlei.bean.ChildCatagoryBean;

import java.util.List;

public class RvRightAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private List<ChildCatagoryBean.DataBean> list;
    private Context context;
    private final LayoutInflater inflater;

    public RvRightAdapter(List<ChildCatagoryBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
        inflater = LayoutInflater.from(context);
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.rvright_item, parent,false);
        RightViewHolder rightViewHolder=new RightViewHolder(view);
        return rightViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        RightViewHolder rightViewHolder= (RightViewHolder) holder;
        rightViewHolder.tv_rightcata.setText(list.get(position).getName());
        //设置子适配器
        List<ChildCatagoryBean.DataBean.ListBean> list_child = this.list.get(position).getList();
        RvChildAdapter rvChildAdapter = new RvChildAdapter(list_child, context);
        rightViewHolder.rv_child.setLayoutManager(new GridLayoutManager(context,3));
        rightViewHolder.rv_child.setAdapter(rvChildAdapter);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class RightViewHolder extends RecyclerView.ViewHolder{
        TextView tv_rightcata;
        RecyclerView rv_child;

        public RightViewHolder(View itemView) {
            super(itemView);
            this.tv_rightcata = (TextView) itemView.findViewById(R.id.tv_rightcata);
            this.rv_child = (RecyclerView) itemView.findViewById(R.id.rv_child);
        }
    }
}

12.右面子recycleview的适配器

package com.example.day12_fenlei.ui.adapter;

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.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.day12_fenlei.R;
import com.example.day12_fenlei.bean.ChildCatagoryBean;

import java.util.List;

public class RvChildAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private List<ChildCatagoryBean.DataBean.ListBean> list;
    private Context context;
    private final LayoutInflater inflater;

    public RvChildAdapter(List<ChildCatagoryBean.DataBean.ListBean> list, Context context) {
        this.list = list;
        this.context = context;
        inflater = LayoutInflater.from(context);
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.rvchild_item, parent,false);
        ChildViewHolder childViewHolder=new ChildViewHolder(view);
        return childViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        ChildViewHolder childViewHolder= (ChildViewHolder) holder;
        childViewHolder.tv_child.setText(list.get(position).getName());
        //加载图片
        Glide.with(context).load(list.get(position).getIcon()).into(childViewHolder.img_child);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class ChildViewHolder extends RecyclerView.ViewHolder{
        ImageView img_child;
        TextView tv_child;

        public ChildViewHolder(View itemView) {
            super(itemView);
            this.img_child = (ImageView) itemView.findViewById(R.id.img_child);
            this.tv_child = (TextView) itemView.findViewById(R.id.tv_child);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值