1.fragment页面
package com.example.jingdong.ui.fragment; import android.os.Bundle; import android.support.annotation.NonNull; 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.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ExpandableListView; import com.example.jingdong.R; import com.example.jingdong.bean.CatagoryBean; import com.example.jingdong.bean.ChildCataBean; import com.example.jingdong.presenter.CatagoryPresenterImp; import com.example.jingdong.presenter.ChildCataPresenterImp; import com.example.jingdong.ui.adapter.ElvAdapter; import com.example.jingdong.ui.adapter.RvLeftAdapter; import com.example.jingdong.ui.inter.CatagoryView; import com.example.jingdong.ui.inter.ChildCataView; import com.example.jingdong.ui.inter.OnItemClickListener; import java.util.List; public class FenLeiFragment extends Fragment implements CatagoryView,ChildCataView { private View view; private RecyclerView rvLeft; private ExpandableListView elv; private CatagoryPresenterImp catagoryPresenterImp; private ChildCataPresenterImp childCataPresenterImp; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_fenlei, container, false); //初始化数据 initView(view); //绑定左侧数据 catagoryPresenterImp = new CatagoryPresenterImp(this); catagoryPresenterImp.getCatagory(); //绑定右侧数据 childCataPresenterImp = new ChildCataPresenterImp(this); return view; } private void initView(View view) { 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); } //显示左侧分类 @Override public void showCatagory(final List<CatagoryBean.DataBean> dataBeans) { final RvLeftAdapter rvLeftAdapter = new RvLeftAdapter(dataBeans, getContext()); rvLeft.setAdapter(rvLeftAdapter); //默认显示第一个cid的数据 childCataPresenterImp.getChildCatagory(dataBeans.get(0).getCid()+""); //默认选中第一个数据 rvLeftAdapter.changeCheck(0,true); //点击的监听 rvLeftAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(int position) { rvLeftAdapter.changeCheck(position,true); int cid = dataBeans.get(position).getCid(); childCataPresenterImp.getChildCatagory(cid+""); } @Override public void onItemLongClick(int position) { } }); } //显示子分类 @Override public void showChildCata(List<String> groupList,List<List<ChildCataBean.DataBean.ListBean>> list) { ElvAdapter elvAdapter = new ElvAdapter(groupList, list, getContext()); elv.setAdapter(elvAdapter); //默认展开列表 for (int i = 0; i < groupList.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; } }); } //销毁时解绑数据 @Override public void onDestroy() { super.onDestroy(); catagoryPresenterImp.detach(); childCataPresenterImp.detach(); } }
2.获取右侧子分类的p层
package com.example.jingdong.presenter; import com.example.jingdong.bean.ChildCataBean; import com.example.jingdong.model.ChildCataModelImp; import com.example.jingdong.net.OnNetListener; import com.example.jingdong.ui.inter.ChildCataView; import com.google.gson.Gson; import java.util.ArrayList; import java.util.List; public class ChildCataPresenterImp implements ChildCataPresenter{ private ChildCataView childCataView; private final ChildCataModelImp childCataModelImp; public ChildCataPresenterImp(ChildCataView childCataView) { this.childCataView=childCataView; childCataModelImp = new ChildCataModelImp(); } @Override public void getChildCatagory(String cid) { childCataModelImp.getChildCatagory(cid, new OnNetListener() { @Override public void onSuccess(String result) { ChildCataBean childCataBean = new Gson().fromJson(result, ChildCataBean.class); if ("0".equals(childCataBean.getCode()) && childCataView!=null){ //定义数组存放数据 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()); } childCataView.showChildCata(list_group,child_lists); } } @Override public void onFailed(Exception e) { } }); } @Override public void detach() { if (childCataView!=null){ childCataView=null; } } }
3.左侧recycleview的适配器
package com.example.jingdong.ui.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.ui.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(); } }
4.右侧expandablelistview的适配器
package com.example.jingdong.ui.adapter; import android.content.Context; import android.content.Intent; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.PointerIcon; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.TextView; import com.example.jingdong.R; import com.example.jingdong.bean.ChildCataBean; import com.example.jingdong.ui.activity.GoodsListActivity; import com.example.jingdong.ui.inter.OnItemClickListener; import java.util.List; public class ElvAdapter extends BaseExpandableListAdapter{ private List<String> grouplist; private List<List<ChildCataBean.DataBean.ListBean>> childlist; private Context context; private final LayoutInflater inflater; public ElvAdapter(List<String> grouplist, List<List<ChildCataBean.DataBean.ListBean>> childlist, Context context) { this.grouplist = grouplist; this.childlist = childlist; this.context = context; inflater = LayoutInflater.from(context); } @Override public int getGroupCount() { return grouplist.size(); } @Override public int getChildrenCount(int groupPosition) { return 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.elv_group,null); groupViewHolder.tv_elv=convertView.findViewById(R.id.tv_elv); convertView.setTag(groupViewHolder); }else { groupViewHolder= (GroupViewHolder) convertView.getTag(); } groupViewHolder.tv_elv.setText(grouplist.get(groupPosition)); return convertView; } @Override public View getChildView(final int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder childViewHolder; if (convertView==null){ convertView=inflater.inflate(R.layout.elv_child,null); childViewHolder=new ChildViewHolder(); childViewHolder.rv_elv=convertView.findViewById(R.id.rv_elv); convertView.setTag(childViewHolder); }else { childViewHolder= (ChildViewHolder) convertView.getTag(); } //得到数据 List<ChildCataBean.DataBean.ListBean> listBeans = childlist.get(groupPosition); childViewHolder.rv_elv.setLayoutManager(new GridLayoutManager(context,3)); //创建适配器 ElvRvAdapter elvRvAdapter = new ElvRvAdapter(listBeans, context); childViewHolder.rv_elv.setAdapter(elvRvAdapter); //点击跳转的监听 elvRvAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(int position) { int pscid = childlist.get(groupPosition).get(position).getPscid(); Intent intent = new Intent(context, GoodsListActivity.class); intent.putExtra("pscid",pscid); context.startActivity(intent); } @Override public void onItemLongClick(int position) { } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } class GroupViewHolder{ TextView tv_elv; } class ChildViewHolder{ RecyclerView rv_elv; } }
5.右侧expandablelistview子布局的recycleview适配器
package com.example.jingdong.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.LinearLayout; import android.widget.TextView; import com.bumptech.glide.Glide; import com.example.jingdong.R; import com.example.jingdong.bean.ChildCataBean; import com.example.jingdong.ui.inter.OnItemClickListener; import java.util.List; public class ElvRvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<ChildCataBean.DataBean.ListBean> list; private Context context; private final LayoutInflater inflater; private OnItemClickListener onItemClickListener; public ElvRvAdapter(List<ChildCataBean.DataBean.ListBean> 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.elv_rv_item, parent, false); ElvRvViewHolder elvRvViewHolder = new ElvRvViewHolder(view); return elvRvViewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { ElvRvViewHolder elvRvViewHolder= (ElvRvViewHolder) holder; elvRvViewHolder.tv_elvrv.setText(list.get(position).getName()); Glide.with(context).load(list.get(position).getIcon()).into(elvRvViewHolder.img_elvrv); //设置点击监听 elvRvViewHolder.layout_elv_rv_item.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onItemClickListener.onItemClick(position); } }); } @Override public int getItemCount() { return list.size(); } class ElvRvViewHolder extends RecyclerView.ViewHolder { LinearLayout layout_elv_rv_item; ImageView img_elvrv; TextView tv_elvrv; public ElvRvViewHolder(View itemView) { super(itemView); layout_elv_rv_item = itemView.findViewById(R.id.layout_elv_rv_item); img_elvrv=itemView.findViewById(R.id.img_elvrv); tv_elvrv=itemView.findViewById(R.id.tv_elvrv); } } }