写一个ClassContract
public interface ClassContract { interface View extends BaseContract.BaseView{ void getCatagorySuccess(CatagoryBean catagoryBean); void getProductCatagorySuccess(ProductCatagoryBean productCatagoryBean); } interface Presenter extends BaseContract.BasePresenter<View>{ void getProductCatagory(String cid); void getCatagory(); } }
写一个ClassPresenter
public class ClassPresenter extends BasePresenter<ClassContract.View> implements ClassContract.Presenter{ private CatagoryApi catagoryApi; private ProductCatagoryApi productCatagoryApi; @Inject public ClassPresenter(CatagoryApi catagoryApi, ProductCatagoryApi productCatagoryApi) { this.catagoryApi = catagoryApi; this.productCatagoryApi = productCatagoryApi; } @Override public void getProductCatagory(String cid) { productCatagoryApi.getProductCatagory(cid) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer<ProductCatagoryBean>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ProductCatagoryBean productCatagoryBean) { if (mView != null) { mView.getProductCatagorySuccess(productCatagoryBean); } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } @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) { if(mView!=null){ mView.getCatagorySuccess(catagoryBean); } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } }
主页面ClassFragment
public class ClassFragment extends BaseFragment<ClassPresenter> implements ClassContract.View { private RecyclerView mRvLeft; private ImageView mIv; private ExpandableListView mElv; @Override public int getContentLayout() { return R.layout.fragment_class; } @Override public void inject() { DaggerHttpComponent.builder() .httpModule(new HttpModule()) .build() .inject(this); } @Override public void initView(View view) { mPresenter.getCatagory(); mRvLeft = view.findViewById(R.id.rvLeft); mIv = view.findViewById(R.id.iv); mIv.setBackgroundResource(R.drawable.timg); mElv = view.findViewById(R.id.elv); mElv.setGroupIndicator(null); } public void getCatagorySuccess(CatagoryBean catagoryBean) { final List<CatagoryBean.DataBean> data = catagoryBean.getData(); mRvLeft.setLayoutManager(new LinearLayoutManager(getContext())); mRvLeft.addItemDecoration(new DividerItemDecoration(getContext(), RecyclerView.VERTICAL)); final RvLeftAdapter adapter = new RvLeftAdapter(getContext(), data); mRvLeft.setAdapter(adapter); mPresenter.getProductCatagory(data.get(0).getCid()+""); adapter.changeCheck(0, true); adapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(int position) { adapter.changeCheck(position, true); mPresenter.getProductCatagory(data.get(position).getCid() + ""); } @Override public void onLongItemClick(int position) { } }); } @Override public void getProductCatagorySuccess(ProductCatagoryBean productCatagoryBean) { List<String> groupList = new ArrayList<>(); List<List<ProductCatagoryBean.DataBean.ListBean>> childList = new ArrayList<>(); List<ProductCatagoryBean.DataBean> data = productCatagoryBean.getData(); for (int i = 0; i < data.size(); i++) { groupList.add(data.get(i).getName()); List<ProductCatagoryBean.DataBean.ListBean> list = data.get(i).getList(); childList.add(list); } ElvAdapter elvAdapter = new ElvAdapter(getContext(), groupList, childList); mElv.setAdapter(elvAdapter); for (int i = 0; i < groupList.size(); i++) { mElv.expandGroup(i); } } }适配器 ElvAdapter
public class ElvAdapter extends BaseExpandableListAdapter { private Context context; private List<String> groupList; private List<List<ProductCatagoryBean.DataBean.ListBean>> childList; private LayoutInflater inflater; public ElvAdapter(Context context, List<String> groupList, List<List<ProductCatagoryBean.DataBean.ListBean>> childList) { this.context = context; this.groupList = groupList; this.childList = childList; inflater = LayoutInflater.from(context); } @Override public int getGroupCount() { return groupList.size(); } @Override public int getChildrenCount(int groupPosition) { return 1;//因为二级列表是一个RecylerView,所以返回1即可 } @Override public Object getGroup(int groupPosition) { return groupList.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return childList.get(groupPosition).get(childPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { GroupViewHolder groupViewHolder; if (convertView == null) { groupViewHolder = new GroupViewHolder(); convertView = inflater.inflate(R.layout.rvleft_item, null); groupViewHolder.tv = convertView.findViewById(R.id.tv); convertView.setTag(groupViewHolder); } else { groupViewHolder = (GroupViewHolder) convertView.getTag(); } //显示数据 groupViewHolder.tv.setText(groupList.get(groupPosition)); return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder childViewHolder; if (convertView == null) { childViewHolder = new ChildViewHolder(); convertView = inflater.inflate(R.layout.elv_rv, null); childViewHolder.rv = convertView.findViewById(R.id.rv); convertView.setTag(childViewHolder); } else { childViewHolder = (ChildViewHolder) convertView.getTag(); } //显示数据 final List<ProductCatagoryBean.DataBean.ListBean> listBeans = childList.get(groupPosition); //设置布局管理器 childViewHolder.rv.setLayoutManager(new GridLayoutManager(context, 3)); //设置适配器 ElvRvAdapter elvRvAdapter = new ElvRvAdapter(context, listBeans); childViewHolder.rv.setAdapter(elvRvAdapter); // elvRvAdapter.setOnItemClickListener(new OnItemClickListener() { // @Override // public void onItemClick(int position) { // //点击跳转到列表页面 // Intent intent = new Intent(context, ListActivity.class); // int pscid = listBeans.get(position).getPscid(); // intent.putExtra("pscid", pscid); // context.startActivity(intent); // } // // @Override // public void onLongItemClick(int position) { // // } // }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } class GroupViewHolder { TextView tv; } class ChildViewHolder { RecyclerView rv; } }
ElvRvAdapter适配器
public class ElvRvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<ProductCatagoryBean.DataBean.ListBean> listBeans; private LayoutInflater inflater; private OnItemClickListener onItemClickListener; public ElvRvAdapter(Context context, List<ProductCatagoryBean.DataBean.ListBean> listBeans) { this.context = context; this.listBeans = listBeans; 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.rvclass_item, parent, false); ElvRvAdapterViewHolder elvRvAdapterViewHolder = new ElvRvAdapterViewHolder(view); return elvRvAdapterViewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { ElvRvAdapterViewHolder elvRvAdapterViewHolder = (ElvRvAdapterViewHolder) holder; ProductCatagoryBean.DataBean.ListBean listBean = listBeans.get(position); //Glide.with(context).load(listBean.getIcon()).into(elvRvAdapterViewHolder.iv); String s = listBean.getIcon(); elvRvAdapterViewHolder.iv.setImageURI(Uri.parse(s)); elvRvAdapterViewHolder.tv.setText(listBean.getName()); //给条目设置点击事件 elvRvAdapterViewHolder.ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onItemClick(position); } } }); } @Override public int getItemCount() { return listBeans.size(); } class ElvRvAdapterViewHolder extends RecyclerView.ViewHolder { private final ImageView iv; private final TextView tv; private final LinearLayout ll; public ElvRvAdapterViewHolder(View itemView) { super(itemView); ll = itemView.findViewById(R.id.ll); iv = itemView.findViewById(R.id.iv); tv = itemView.findViewById(R.id.tv); } } }
RvLeftAdapter适配器
public class RvLeftAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<CatagoryBean.DataBean> list; private LayoutInflater inflater; private OnItemClickListener onItemClickListener; public RvLeftAdapter(Context context, List<CatagoryBean.DataBean> list) { this.context = context; this.list = list; 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); LeftViewHolder leftViewHolder = new LeftViewHolder(view); return leftViewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { CatagoryBean.DataBean dataBean = list.get(position); LeftViewHolder leftViewHolder = (LeftViewHolder) holder; leftViewHolder.tv.setText(dataBean.getName()); //设置字体颜色 if (dataBean.getChecked()) { leftViewHolder.tv.setTextColor(Color.RED); leftViewHolder.tv.setBackgroundColor(Color.BLUE); } else { leftViewHolder.tv.setTextColor(Color.BLACK); leftViewHolder.tv.setBackgroundColor(Color.WHITE); } leftViewHolder.tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onItemClick(position); } } }); } @Override public int getItemCount() { return list.size(); } class LeftViewHolder extends RecyclerView.ViewHolder { private final TextView tv; public LeftViewHolder(View itemView) { super(itemView); tv = itemView.findViewById(R.id.tv); } } /** * 选中后,改变字体颜色和背景色 * * @param position * @param bool */ public void changeCheck(int position, boolean bool) { //先还原一下 for (int i = 0;i<list.size();i++){ list.get(i).setChecked(false); } CatagoryBean.DataBean dataBean = list.get(position); dataBean.setChecked(bool); //刷新界面 notifyDataSetChanged(); } }适配器布局文件请参考京东首页里面的布局