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