(一)
主布局----activity_main
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="zhangyanran20181022.bwie.com.zhoukaosan.mvp.view.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/zrv"
android:layout_width="100dp"
android:layout_height="match_parent" />
<ExpandableListView
android:id="@+id/yev"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
左布局--zuo_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/zuo_mz"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="名字"
android:layout_gravity="center"/>
</LinearLayout>
右布局----给二级类表的条目赋值---------you_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/you_you"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="名字"
android:layout_gravity="center"/>
</LinearLayout>
右布局二级列表中嵌套RecyclerView---------youhai_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/youhao_re"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>
右布局二级列表中嵌套RecyclerView的子布局----------child_item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/img_child"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/tv_child"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="名字"/>
</LinearLayout>
mvp中view层
接口
public interface IFenView {
void onZuo(Zean zean);
void onYuo(Yean yean);
}
avtivity
public class MainActivity extends AppCompatActivity implements IFenView {
@BindView(R.id.zrv)
RecyclerView zrv;
@BindView(R.id.yev)
ExpandableListView yev;
private FenPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//拿到P层
presenter = new FenPresenter(this);
presenter.ShowPer();
presenter.FlShowYou(1);
}
@Override
public void onZuo(final Zean zean) {
//线性布局
zrv.setLayoutManager(new LinearLayoutManager(MainActivity.this));
//拿到适配器
ZouAdapter adapter= new ZouAdapter(MainActivity.this,zean);
zrv.setAdapter(adapter);
//调用点击事件
adapter.setOnItemClickListener(new ZouAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
int id = zean.getData().get(position).getCid();
presenter.FlShowYou(id);
}
});
}
@Override
public void onYuo(Yean yean) {
//拿到适配器
ErAdapter adapter = new ErAdapter(MainActivity.this,yean);
yev.setAdapter(adapter);
//父级列表默认全部展开
int groupCount = yev.getCount();
for (int i=0; i<groupCount; i++){
yev.expandGroup(i);
}
//设置父条目不可点击
yev.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
return true;//返回true,表示不可点击
}
});
//设置属性去掉默认向下的箭头
yev.setGroupIndicator(null);
}
}
P层
public class FenPresenter implements FenModel.ScuMod {
IFenView view;
FenModel model;
public FenPresenter(IFenView view) {
this.view = view;
model = new FenModel();
model.setScuMod(this);
}
@Override
public void Zc(Zean bean) {
view.onZuo(bean);
}
@Override
public void Yc(Yean yean) {
view.onYuo(yean);
}
//左侧调用
public void ShowPer(){
model.ZuoChen();
}
// 右侧调用
public void FlShowYou(int cont){
model.YuoChen(cont);
}
}
M层
网络接口
public interface Api {
@GET("product/getCatagory")
Observable<Zean> Zuo();
@GET("product/getProductCatagory")
Observable<Yean> You(@Query("cid") int cid);
}
M层类
public class FenModel {
ScuMod scuMod;
public void setScuMod(ScuMod scuMod) {
this.scuMod = scuMod;
}
//左面请求
public void ZuoChen(){
//OkHttp里面可以添加拦截器
OkHttpClient ok = new OkHttpClient.Builder()
.build();
//请求数据
RetrofitUnitl.getInstance("http://www.zhaoapi.cn/",ok)
.setCreate(Api.class)
.Zuo()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<Zean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Zean zean) {
scuMod.Zc(zean);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
//右面请求
public void YuoChen(int cont){
//OkHttp里面可以添加拦截器
OkHttpClient ok = new OkHttpClient.Builder()
.build();
//请求数据
RetrofitUnitl.getInstance("http://www.zhaoapi.cn/",ok)
.setCreate(Api.class)
.You(cont)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<Yean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Yean yean) {
scuMod.Yc(yean);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
//定义一个接口
public interface ScuMod{
void Zc(Zean bean);
void Yc(Yean yean);
}
}
网络请求数据
public class RetrofitUnitl {
private Retrofit mRetrofit;
private String baseUrl;
OkHttpClient client;
private static RetrofitUnitl mRetrofitManager;
private RetrofitUnitl(String baseUrl,OkHttpClient client){
this.baseUrl=baseUrl;
this.client=client;
initRetrofit();
}
public static synchronized RetrofitUnitl getInstance(String baseUrl,OkHttpClient client){
if (mRetrofitManager == null){
mRetrofitManager = new RetrofitUnitl(baseUrl,client);
}
return mRetrofitManager;
}
private void initRetrofit() {
mRetrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build();
}
public <T> T setCreate(Class<T> reqServer) {
return mRetrofit.create(reqServer);
}
}
左边adapter
public class ZouAdapter extends RecyclerView.Adapter<ZouAdapter.MyHolder> {
private Context context;
private Zean zean;
private OnItemClickListener mOnItemClickListener;
public ZouAdapter(Context context, Zean list) {
this.context = context;
this.zean = list;
}
public interface OnItemClickListener{
void onItemClick(View view, int position);
}
public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
this.mOnItemClickListener = mOnItemClickListener;
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyHolder holder = new MyHolder(LayoutInflater.from(context).inflate(R.layout.zuo_layout, parent, false));
return holder;
}
@Override
public void onBindViewHolder(final MyHolder holder, int position) {
holder.zuo_mz.setText(zean.getData().get(position).getName());
if (mOnItemClickListener != null){
holder.zuo_mz.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = holder.getLayoutPosition(); // 1
mOnItemClickListener.onItemClick(holder.itemView,position); // 2
}
});
}
}
@Override
public int getItemCount() {
return zean.getData().size();
}
class MyHolder extends RecyclerView.ViewHolder {
TextView zuo_mz;
public MyHolder(View itemView) {
super(itemView);
zuo_mz = itemView.findViewById(R.id.zuo_mz);
}
}
}
右边二级列表的adapter
public class ErAdapter extends BaseExpandableListAdapter{
private Context context;
private Yean yean;
public ErAdapter(Context context, Yean yean) {
this.context = context;
this.yean = yean;
}
@Override
public int getGroupCount() {
return yean.getData().size();
}
@Override
public int getChildrenCount(int i) {
return 1;
}
@Override
public Object getGroup(int i) {
return yean.getData().get(i);
}
@Override
public Object getChild(int i, int i1) {
return yean.getData().get(i).getList().get(i);
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i1) {
return i1;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
//父级
View v = View.inflate(context, R.layout.you_layout, null);
TextView expand_tv = v.findViewById(R.id.you_you);
expand_tv.setText(yean.getData().get(i).getName());
return v;
}
@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
//嵌套RecyclerView的布局
View v = View.inflate(context,R.layout.youhai_layout,null);
RecyclerView expand_recycler = v.findViewById(R.id.youhao_re);
//RecyclerView网格格式
GridLayoutManager gridlayout = new GridLayoutManager(context,3);
expand_recycler.setLayoutManager(gridlayout);
//RecyclerView的适配器
setchild_Aapterer chapter = new setchild_Aapterer(context,yean,i,i1);
expand_recycler.setAdapter(chapter);
return v;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return false;
}
}
右边二级列表中嵌套的RecyclerView的adapter
public class setchild_Aapterer extends RecyclerView.Adapter<setchild_Aapterer.ViewHodler>{
private Context context;
private Yean yean;
private int i,i1;
private OnItemClickListener mOnItemClickListener;
public setchild_Aapterer(Context context,Yean list,int i,int i1) {
this.context = context;
this.yean = list;
this.i = i;
this.i1 = i1;
}
//点击事件
public interface OnItemClickListener{
void onItemClick(View view, int position);
}
public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
this.mOnItemClickListener = mOnItemClickListener;
}
@Override
public setchild_Aapterer.ViewHodler onCreateViewHolder(ViewGroup parent, int viewType) {
View v = View.inflate(context, R.layout.child_item,null);
ViewHodler hodler = new ViewHodler(v);
hodler.img_child = v.findViewById(R.id.img_child);
hodler.tv_child = v.findViewById(R.id.tv_child);
return hodler;
}
@Override
public void onBindViewHolder(final setchild_Aapterer.ViewHodler holder, int position) {
String[] str =yean.getData().get(i).getList().get(position).getIcon().split("\\|");
String s = str[0];
Glide.with(context).load(s).into(holder.img_child);
holder.tv_child.setText(yean.getData().get(i).getList().get(position).getName());
if (mOnItemClickListener != null){
holder.img_child.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position =holder.getLayoutPosition();
mOnItemClickListener.onItemClick(holder.itemView,position); //
}
});
}
}
@Override
public int getItemCount() {
return yean.getData().get(i).getList().size();
}
public class ViewHodler extends RecyclerView.ViewHolder {
private ImageView img_child;
private TextView tv_child;
public ViewHodler(View itemView) {
super(itemView);
}
}
}