仿京东分类实现
首先我这一块我用的是MVP模式写的这个分类,简单说一下它的布局,就两块,左面一块就是RecyclerView,右面一块是二级列表嵌套RecyclerView,请求的时候
我用的Retrofit+Rxjava+OkHttp的结合请求的数据,废话不多说
直接甩代码,代码有点多,慢慢看。
先展示一下效果
首先看一下接口
-
public interface Inters {
-
/**
-
* 左面接口
-
*/
-
@GET("product/getCatagory")
-
Observable<Zean> Zuo();
-
/**
-
* 右面接口
-
*/
-
@GET("product/getProductCatagory")
-
Observable<Yean> You(@Query("cid") int cid);
-
}
Retrofit+Rxjava+OkHttp的结合
-
import okhttp3.OkHttpClient;
-
import retrofit2.Retrofit;
-
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
-
import retrofit2.converter.gson.GsonConverterFactory;
-
/**
-
* Retrofit+Rxjava+OkHttp封装,单例
-
*/
-
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(RxJavaCallAdapterFactory.create())
-
.client(client)
-
.build();
-
}
-
public <T> T setCreate(Class<T> reqServer) {
-
return mRetrofit.create(reqServer);
-
}
-
}
分类的布局
-
<LinearLayout
-
xmlns:android="http://schemas.android.com/apk/res/android"
-
xmlns:tools="http://schemas.android.com/tools"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
android:orientation="horizontal"
-
tools:context="com.xjq.xinjiaqi20171208.MainActivity">
-
-
<android.support.v7.widget.RecyclerView
-
android:id="@+id/zrv"
-
android:layout_width="130dp"
-
android:layout_height="match_parent" />
-
-
<ExpandableListView
-
android:id="@+id/yev"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"></ExpandableListView>
-
-
</LinearLayout>
左侧bean包 和右侧的bean包我就不写了。
下面开始MVP,首先是V层
-
public interface IFenView {
-
void onZuo(Zean zean);//左侧请求成功
-
void onYou(Yean yean);//右侧请求成功
-
}
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("https://www.zhaoapi.cn/",ok)
-
.setCreate(Inters.class)
-
.Zuo()
-
.observeOn(AndroidSchedulers.mainThread())
-
.subscribeOn(Schedulers.io())
-
.subscribe(new Subscriber<Zean>() {
-
@Override
-
public void onCompleted() {
-
-
}
-
-
@Override
-
public void onError(Throwable e) {
-
-
}
-
-
@Override
-
public void onNext(Zean bean) {
-
scuMod.Zc(bean);
-
}
-
});
-
}
-
-
//右面请求
-
public void YuoChen(int cont){
-
//OkHttp里面可以添加拦截器
-
OkHttpClient ok = new OkHttpClient.Builder()
-
.build();
-
//请求数据
-
RetrofitUnitl.getInstance("https://www.zhaoapi.cn/",ok)
-
.setCreate(Inters.class)
-
.You(cont)
-
.observeOn(AndroidSchedulers.mainThread())
-
.subscribeOn(Schedulers.io())
-
.subscribe(new Subscriber<Yean>() {
-
@Override
-
public void onCompleted() {
-
-
}
-
-
@Override
-
public void onError(Throwable e) {
-
-
}
-
-
@Override
-
public void onNext(Yean bean) {
-
scuMod.Yc(bean);
-
}
-
});
-
}
-
//定义一个接口
-
public interface ScuMod{
-
void Zc(Zean bean);
-
void Yc(Yean yean);
-
}
-
}
P层
-
//实现M层的接口
-
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.onYou(yean);
-
}
-
-
//左侧调用
-
public void ShowPer(){
-
model.ZuoChen();
-
}
-
// 右侧调用
-
public void FlShowYou(int cont){
-
model.YuoChen(cont);
-
}
-
}
我们在主方法里面一定要实现V层
-
public class MainActivity extends AppCompatActivity implements IFenView{
-
-
public ExpandableListView yev;
-
public RecyclerView zrv;
-
public FenPresenter presenter;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
//拿到P层
-
presenter = new FenPresenter(this);
-
presenter.ShowPer();
-
//默认展示第一条
-
presenter.FlShowYou(1);
-
//找控件
-
zrv = findViewById(R.id.zrv);
-
yev = findViewById(R.id.yev);
-
}
-
-
@Override
-
public void onZuo(final Zean zean) {
-
//线性布局
-
zrv.setLayoutManager(new LinearLayoutManager(MainActivity.this));
-
//拿到适配器
-
ZuoAdapter adapter= new ZuoAdapter(MainActivity.this,zean);
-
zrv.setAdapter(adapter);
-
//调用点击事件
-
adapter.setOnItemClickListener(new ZuoAdapter.OnItemClickListener() {
-
@Override
-
public void onItemClick(View view, int position) {
-
int id = zean.getData().get(position).getCid();
-
presenter.FlShowYou(id);
-
}
-
});
-
}
-
-
@Override
-
public void onYou(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);
-
}
-
}
-
}
左面RecyclerView的适配器
-
/**
-
* 左面适配器
-
*/
-
public class ZuoAdapter extends RecyclerView.Adapter<ZuoAdapter.MyHolder> {
-
private Context context;
-
private Zean zean;
-
private OnItemClickListener mOnItemClickListener;
-
-
public ZuoAdapter(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_litem, 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);
-
}
-
}
-
}
左面适配器的布局
-
<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>
右面二级列表适配器
-
/**
-
* 二级列表适配器
-
*/
-
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_litem, 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_litem,null);
-
RecyclerView expand_recycler = v.findViewById(R.id.rvClass);
-
//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的适配器
-
/**
-
* 二级列表嵌套RecyclerView的适配器
-
*/
-
-
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);
-
}
-
}
-
}
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:text="名字"
-
android:layout_gravity="center"
-
/>
-
-
-
</LinearLayout>
--------------------- 本文来自 小神奇 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/Star_Q/article/details/78607341?utm_source=copy

浙公网安备 33010602011771号