##分类布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:background="#12000000"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rc1"
android:layout_width="0dp"
android:layout_weight="3"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
<android.support.v7.widget.RecyclerView
android:id="@+id/rc2"
android:layout_width="0dp"
android:layout_weight="7"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>
##契约类
public interface ClaContract {
abstract class ClaPresenter{
public abstract void getLeftlist(HashMap<String,String> map);
public abstract void getRightlist(HashMap<String,String> map);
}
public interface IClaModel{
void getLeftlist(HashMap<String,String> map, ClaModelCallback claModelCallback);
void getRightlist(HashMap<String,String> map, ClaModelCallback claModelCallback);
}
public interface IClaView{
void leftSuccess(LeftBean leftBean);
void rightSuccess(RightBean rightBean);
void leftFail(String error);
void rightFail(String error);
}
}
##model
public class ClaModel implements ClaContract.IClaModel {
@Override
public void getLeftlist(HashMap<String, String> map, final ClaModelCallback claModelCallback) {
OkhttpUtils.getInstance().Get(UserApi.Left_API, new OkhttpCallback() {
@Override
public void onFailok(String msg) {
if (claModelCallback!=null) {
claModelCallback.leftFailure("请求错误");
}
}
@Override
public void onSuccessok(String result) {
if (claModelCallback!=null){
claModelCallback.leftSuccess(result);
}
}
});
}
@Override
public void getRightlist(HashMap<String, String> map, final ClaModelCallback claModelCallback) {
OkhttpUtils.getInstance().Post(UserApi.RIGHT_API, map, new OkhttpCallback() {
@Override
public void onFailok(String msg) {
if (claModelCallback!=null) {
claModelCallback.leftFailure("请求错误");
}
}
@Override
public void onSuccessok(String result) {
if (claModelCallback!=null){
claModelCallback.leftSuccess(result);
}
}
});
}
}
##presenter
public class ClaPersenter extends ClaContract.ClaPresenter {
private ClaModel claModel;
private ClaContract.IClaView iClaView;
public ClaPersenter(ClaContract.IClaView iClaView) {
this.claModel = new ClaModel();
this.iClaView = iClaView;
}
@Override
public void getLeftlist(HashMap<String, String> map) {
claModel.getLeftlist(map, new ClaModelCallback() {
@Override
public void leftSuccess(String result) {
LeftBean leftBean = new Gson().fromJson(result, LeftBean.class);
//List<LeftBean.LeftData> data = leftBean.data;
iClaView.leftSuccess(leftBean);
}
@Override
public void rightSUccess(String result) {
}
@Override
public void leftFailure(String error) {
}
@Override
public void rightFailure(String error) {
}
});
}
@Override
public void getRightlist(HashMap<String, String> map) {
claModel.getRightlist(map, new ClaModelCallback() {
@Override
public void leftSuccess(String result) {
RightBean rightBean = new Gson().fromJson(result, RightBean.class);
/* List<RightBean.RightData> data = rightBean.data;*/
iClaView.rightSuccess(rightBean);
}
@Override
public void rightSUccess(String result) {
}
@Override
public void leftFailure(String error) {
}
@Override
public void rightFailure(String error) {
}
});
}
##ok接口
public interface OkhttpCallback {
void onFailok(String msg);
void onSuccessok(String result);
}
##分类接口
public interface ClaModelCallback {
void leftSuccess(String result);
void rightSUccess(String result);
void leftFailure(String error);
void rightFailure(String error);
}
##okutil
public class OkhttpUtils {
Handler handler = new Handler();
private static OkhttpUtils instance;
private final OkHttpClient okHttpClient;
private OkhttpUtils() {
//拦截器
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.writeTimeout(5,TimeUnit.SECONDS)
.connectTimeout(5,TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS)
.build();
}
public void Post(String url , HashMap<String,String> map, final OkhttpCallback callback){
FormBody.Builder formBody = new FormBody.Builder();
for (Map.Entry<String, String> p : map.entrySet()) {
formBody.add(p.getKey(),p.getValue());
}
Request request = new Request.Builder()
.url(url)
.post(formBody.build())
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (callback!=null) {
handler.post(new Runnable() {
@Override
public void run() {
callback.onFailok("网络异常");
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
if (callback!=null) {
handler.post(new Runnable() {
@Override
public void run() {
callback.onSuccessok(string);
}
});
}
}
});
}
public void Get(String url, final OkhttpCallback callback){
Request request = new Request.Builder()
.url(url)
.get()
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (callback!=null) {
handler.post(new Runnable() {
@Override
public void run() {
callback.onFailok("网络异常");
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
if (callback!=null) {
handler.post(new Runnable() {
@Override
public void run() {
callback.onSuccessok(string);
}
});
}
}
});
}
public static OkhttpUtils getInstance(){
if (instance==null){
synchronized (OkhttpUtils.class){
if (instance==null){
instance = new OkhttpUtils();
}
}
}
return instance;
}
/**
* 取消所有请求,好处:节省开销:内存开销,cpu的开销(线程开销)
*/
public void cancel(){
if (okHttpClient!=null){
okHttpClient.dispatcher().cancelAll();
}
}
}
##left adapter
public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.LeftViewHolder> {
private Context context;
private List<LeftBean.LeftData> list;
public LeftAdapter(Context context, List<LeftBean.LeftData> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public LeftViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.left_layout, viewGroup, false);
LeftViewHolder leftViewHolder = new LeftViewHolder(inflate);
return leftViewHolder;
}
@Override
public void onBindViewHolder(@NonNull LeftViewHolder leftViewHolder, int i) {
final LeftBean.LeftData leftData = list.get(i);
leftViewHolder.name.setText(leftData.name);
leftViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (itemclickCallback!=null){
itemclickCallback.click(leftData.cid);
Log.e("11",leftData.cid+"");
}
}
});
}
@Override
public int getItemCount() {
return list==null?0:list.size();
}
class LeftViewHolder extends RecyclerView.ViewHolder{
TextView name;
public LeftViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
}
}
private ItemclickCallback itemclickCallback;
public void setItemclickCallback(ItemclickCallback itemclickCallback) {
this.itemclickCallback = itemclickCallback;
}
public interface ItemclickCallback{
void click(String cid1);
}
}
##right adapter
public class RightAdapter extends RecyclerView.Adapter<RightAdapter.RightViewHolder> {
private Context context;
private List<RightBean.RightData> list;
public RightAdapter(Context context, List<RightBean.RightData> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public RightViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.right_layout, viewGroup, false);
RightViewHolder rightViewHolder = new RightViewHolder(inflate);
return rightViewHolder;
}
@Override
public void onBindViewHolder(@NonNull RightViewHolder rightViewHolder, int i) {
RightBean.RightData rightData = list.get(i);
rightViewHolder.name.setText(rightData.name);
rightViewHolder.right_rc.setLayoutManager(new GridLayoutManager(context,3));
RightitemAdapter rightitemAdapter = new RightitemAdapter(context,list.get(i).list);
rightViewHolder.right_rc.setAdapter(rightitemAdapter);
}
@Override
public int getItemCount() {
return list==null?0:list.size();
}
class RightViewHolder extends RecyclerView.ViewHolder{
TextView name;
RecyclerView right_rc;
public RightViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
right_rc = itemView.findViewById(R.id.right_rc);
}
}
}
##right item adapter
public class RightitemAdapter extends RecyclerView.Adapter<RightitemAdapter.RightViewHolder> {
private Context context;
private List<RightBean.RightData.RightList> list;
public RightitemAdapter(Context context, List<RightBean.RightData.RightList> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public RightViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.right_item_layout, viewGroup, false);
RightViewHolder rightViewHolder = new RightViewHolder(inflate);
return rightViewHolder;
}
@Override
public void onBindViewHolder(@NonNull RightViewHolder rightViewHolder, int i) {
RightBean.RightData.RightList rightData = list.get(i);
rightViewHolder.name.setText(rightData.name);
Glide.with(context).load(rightData.icon).into(rightViewHolder.img);
}
@Override
public int getItemCount() {
return list==null?0:list.size();
}
class RightViewHolder extends RecyclerView.ViewHolder{
TextView name;
ImageView img;
public RightViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
img = itemView.findViewById(R.id.img);
}
}
}
##分类fragment
public class ClaFragment extends Fragment implements ClaContract.IClaView,LeftAdapter.ItemclickCallback{
@BindView(R.id.rc1)
RecyclerView rc1;
@BindView(R.id.rc2)
RecyclerView rc2;
private ClaPersenter claPersenter;
private String cid = "1";
private LeftAdapter leftAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.cla_fragment, container, false);
ButterKnife.bind(this,view);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initData();
}
private void initData() {
rc1.setLayoutManager(new LinearLayoutManager(getActivity()));
rc2.setLayoutManager(new LinearLayoutManager(getActivity()));
claPersenter = new ClaPersenter(this);
claPersenter.getLeftlist(new HashMap<String,String>());
getRight();
}
private void getRight() {
HashMap<String,String> map = new HashMap<>();
map.put("cid",cid);
Log.e("right",cid+"");
claPersenter.getRightlist(map);
}
@Override
public void leftSuccess(LeftBean leftBean) {
if (leftAdapter==null) {
leftAdapter = new LeftAdapter(getActivity(), leftBean.data);
rc1.setAdapter(leftAdapter);
leftAdapter.setItemclickCallback(this);
}else {
leftAdapter.notifyDataSetChanged();
}
}
@Override
public void rightSuccess(RightBean rightBean) {
RightAdapter rightAdapter = new RightAdapter(getActivity(),rightBean.data);
rc2.setAdapter(rightAdapter);
}
@Override
public void leftFail(String error) {
Toast.makeText(getActivity(),"left请求错误",Toast.LENGTH_SHORT).show();
}
@Override
public void rightFail(String error) {
Toast.makeText(getActivity(),"right请求错误",Toast.LENGTH_SHORT).show();
}
/**
* 左边的点击事件
*/
@Override
public void click(String cid1) {
cid = cid1;
getRight();
}
}