mainactivity.xml
<?xml version="1.0" encoding="utf-8"?>
<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"
android:orientation="vertical"
tools:context=".di.activity.MainActivity">
<com.hjm.bottomtabbar.BottomTabBar
android:id="@+id/bottom_tab_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</com.hjm.bottomtabbar.BottomTabBar>
</LinearLayout>
左边布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/text3"
android:layout_width="match_parent"
android:layout_height="130dp"
android:gravity="center"
android:layout_marginLeft="40dp"
android:layout_marginRight="20dp"
android:textSize="25sp"
android:textColor="#00ff00"
android:text="123"/>
</LinearLayout>
</LinearLayout>
右布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/img1"
android:layout_width="130dp"
android:layout_height="130dp"
android:layout_gravity="center"
android:layout_margin="10dp"
android:padding="15dp"
android:src="@drawable/ic_launcher_background"/>
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30dp"
android:text="123123123"/>
</LinearLayout>
</LinearLayout>
动画布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/text_view"
android:layout_width="100dp"
android:layout_marginLeft="180dp"
android:layout_alignParentLeft="true"
android:gravity="center_horizontal"
android:background="@drawable/iteamss"
android:layout_height="100dp" />
</RelativeLayout>
Fragment布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="0dp"
android:layout_weight="1"
android:divider="@drawable/iteamss"
android:showDividers="middle"
android:dividerPadding="1.5dp"
android:layout_height="match_parent"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv1"
android:layout_width="0dp"
android:layout_marginTop="10dp"
android:divider="@drawable/iteamss"
android:showDividers="middle"
android:dividerPadding="1.5dp"
android:layout_weight="2"
android:layout_height="match_parent"/>
</LinearLayout>
OKHttp网络请求类
package com.bawie.study.di.util;
import android.os.Handler;
import java.io.IOException;
import java.text.Format;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.security.auth.callback.Callback;
import okhttp3.Call;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class Okhttpr {
private static Okhttpr okhttpr = null;
private final OkHttpClient okHttpClient;
Handler handler = new Handler();
public static Okhttpr getInstance(){
if(okhttpr==null){
synchronized (Okhttpr.class){
if(okhttpr==null){
okhttpr = new Okhttpr();
}
}
}
return okhttpr;
}
private Okhttpr(){
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.writeTimeout(5,TimeUnit.SECONDS)
.connectTimeout(5,TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS)
.build();
};
/**
* 调用doget方法
*/
public void doGet(String url, final OkHttpCallBack okHttpCallBack){
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.build();
Request request = new Request.Builder()
.url(url)
.build();
okHttpClient.newCall(request).enqueue(new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.code()==200){
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallBack.Success(string);
}
});
}
}
});
}
public void doPost(String url, HashMap<String,String> params, final OkHttpCallBack callBack){
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String,String> map:params.entrySet()) {
builder.add(map.getKey(),map.getValue());
}
RequestBody requestBody = builder.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
okHttpClient.newCall(request).enqueue(new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.code()==200){
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
callBack.Success(string);
}
});
}
}
});
}
}
OkHttp接口
package com.bawie.study.di.util;
public interface OkHttpCallBack {
void Success(String result);
void Error(String m);
}
所有接口
package com.bawie.study.di.caotart;
import com.bawie.study.data.presenter.MPresenter;
import com.bawie.study.di.util.OkHttpCallBack;
import java.util.HashMap;
public interface ICaotartInter {
//p
public abstract class MPresenter{
public abstract void CLeft(HashMap<String,String> params);
public abstract void CRight(HashMap<String,String> params);
}
//v
interface MView{
void LeftSuccess(String result);
void LeftError(String m);
void RightSuccess(String result);
void RightError(String m);
}
//m
interface MModel{
public abstract void CLeft(HashMap<String,String> params, OkHttpCallBack okHttpCallBack);
public abstract void CRight(HashMap<String,String> params,OkHttpCallBack okHttpCallBack);
}
}
Api接口
package com.bawie.study.di.api;
public class Api {
public static final String Left_API = "http://172.17.8.100/small/commodity/v1/findFirstCategory";
public static final String RIGHT_API = "http://172.17.8.100/small/commodity/v1/findSecondCategory?firstCategoryId=";
}
model层
package com.bawie.study.data.model;
import android.os.Handler;
import android.os.Message;
import com.bawie.study.di.api.Api;
import com.bawie.study.di.caotart.ICaotartInter;
import com.bawie.study.di.util.OkHttpCallBack;
import com.bawie.study.di.util.Okhttpr;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public class MModel implements ICaotartInter.MModel {
private String key;
private String value;
@Override
public void CLeft(HashMap<String, String> params, final OkHttpCallBack okHttpCallBack) {
Okhttpr.getInstance().doGet(Api.Left_API, new OkHttpCallBack() {
@Override
public void Success(String result) {
okHttpCallBack.Success(result);
}
@Override
public void Error(String m) {
okHttpCallBack.Error(m);
}
});
}
@Override
public void CRight(HashMap<String, String> params, final OkHttpCallBack okHttpCallBack) {
for (Map.Entry<String, String> map: params.entrySet()) {
key = map.getKey();
value = map.getValue();
}
String s = Api.RIGHT_API + value;
Okhttpr.getInstance().doGet(s, new OkHttpCallBack() {
@Override
public void Success(String result) {
okHttpCallBack.Success(result);
}
@Override
public void Error(String m) {
okHttpCallBack.Error(m);
}
});
}
}
presenter层
package com.bawie.study.data.presenter;
import com.bawie.study.data.model.MModel;
import com.bawie.study.di.caotart.ICaotartInter;
import com.bawie.study.di.util.OkHttpCallBack;
import java.util.HashMap;
public class MPresenter extends ICaotartInter.MPresenter {
private ICaotartInter.MView mView;
private MModel mModel;
public MPresenter(ICaotartInter.MView mView) {
this.mView = mView;
mModel = new MModel();
}
@Override
public void CLeft(HashMap<String, String> params) {
mModel.CLeft(params, new OkHttpCallBack() {
@Override
public void Success(String result) {
mView.LeftSuccess(result);
}
@Override
public void Error(String m) {
mView.LeftError(m);
}
});
}
@Override
public void CRight(HashMap<String, String> params) {
mModel.CRight(params, new OkHttpCallBack() {
@Override
public void Success(String result) {
mView.RightSuccess(result);
}
@Override
public void Error(String m) {
mView.RightError(m);
}
});
}
}
左边的adapter内容
package com.bawie.study.di.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.TextView;
import com.bawie.study.R;
import com.bawie.study.di.activity.MainActivity;
import com.bawie.study.di.bean.LeftBean;
import java.util.ArrayList;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
public Context context;
public List<LeftBean.ResultBean> data;
public MyAdapter(Context context) {
this.context = context;
data = new ArrayList<>();
}
public void setData(List<LeftBean.ResultBean> data) {
this.data = data;
notifyDataSetChanged();
}
@NonNull
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.iteam1, null, false);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
myViewHolder.text3.setText(data.get(i).name);
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onclicklisener!=null){
onclicklisener.click(data.get(i).id);
}
}
});
}
@Override
public int getItemCount() {
return data.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
private final TextView text3;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
text3 = itemView.findViewById(R.id.text3);
}
}
private onclicklisener onclicklisener;
public void setOnclicklisener(MyAdapter.onclicklisener onclicklisener) {
this.onclicklisener = onclicklisener;
}
public interface onclicklisener{
void click(String cid);
}
}
右边的adapter内容
package com.bawie.study.di.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.bawie.study.R;
import com.bawie.study.di.bean.RightBean;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
import java.util.List;
public class MyAdapters extends RecyclerView.Adapter<MyAdapters.MyViewHolders> {
public Context context;
public List<RightBean.ResultBean> data;
public MyAdapters(Context context) {
this.context = context;
data = new ArrayList<>();
}
public void setData(List<RightBean.ResultBean> data) {
this.data = data;
notifyDataSetChanged();
}
@NonNull
@Override
public MyAdapters.MyViewHolders onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.iteam2, null, false);
MyViewHolders myViewHolders = new MyViewHolders(view);
return myViewHolders;
}
@Override
public void onBindViewHolder(@NonNull MyAdapters.MyViewHolders myViewHolders, int i) {
myViewHolders.text1.setText(data.get(i).name);
Glide.with(context).load("http://365jia.cn/uploads/appletrecommend/201804/5ad6ba6c6bb8b.jpg").into(myViewHolders.img1);
}
@Override
public int getItemCount() {
return data.size();
}
public class MyViewHolders extends RecyclerView.ViewHolder{
private final ImageView img1;
private final TextView text1;
public MyViewHolders(@NonNull View itemView) {
super(itemView);
img1 = itemView.findViewById(R.id.img1);
text1 = itemView.findViewById(R.id.text1);
}
}
}
//左边的bean类
package com.bawie.study.di.bean;
import java.util.List;
public class LeftBean {
public List<ResultBean> result;
public static class ResultBean {
public String id;
public String name;
}
}
//Fragment页面内容
package com.bawie.study.di.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.GridLayoutManager;
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 com.bawie.study.R;
import com.bawie.study.data.presenter.MPresenter;
import com.bawie.study.di.activity.MainActivity;
import com.bawie.study.di.adapter.MyAdapter;
import com.bawie.study.di.adapter.MyAdapters;
import com.bawie.study.di.bean.LeftBean;
import com.bawie.study.di.bean.RightBean;
import com.bawie.study.di.caotart.ICaotartInter;
import com.google.gson.Gson;
import java.util.HashMap;
public class FragmentOne extends Fragment implements ICaotartInter.MView,MyAdapter.onclicklisener{
private RecyclerView rv;
private MyAdapter myAdapter;
private MyAdapters myAdapters;
private RecyclerView rv1;
private MPresenter mPresenter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1, container, false);
rv = view.findViewById(R.id.rv);
rv1 = view.findViewById(R.id.rv1);
myAdapter = new MyAdapter(getActivity());
myAdapters = new MyAdapters(getActivity());
mPresenter = new MPresenter(this);
rv.setLayoutManager(new LinearLayoutManager(getActivity()));
rv1.setLayoutManager(new GridLayoutManager(getActivity(),3));
mPresenter.CLeft(new HashMap<String, String>());
return view;
}
private void getLeft(String cid) {
HashMap<String,String> params = new HashMap<>();
params.put("firstCategoryId",cid);
mPresenter.CRight(params);
}
@Override
public void LeftSuccess(String result) {
LeftBean leftBean = new Gson().fromJson(result, LeftBean.class);
myAdapter.setData(leftBean.result);
myAdapter.setOnclicklisener(this);
rv.setAdapter(myAdapter);
}
@Override
public void LeftError(String m) {
}
@Override
public void RightSuccess(String result) {
RightBean rightBean = new Gson().fromJson(result, RightBean.class);
myAdapters.setData(rightBean.result);
rv1.setAdapter(myAdapters);
}
@Override
public void RightError(String m) {
}
@Override
public void click(String cid) {
getLeft(cid);
}
}