xml文件
//Main层
<?xml version="1.0" encoding="utf-8"?> <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" > <android.support.v7.widget.RecyclerView android:id="@+id/left_view" android:layout_width="130dp" android:layout_height="match_parent" /> <ExpandableListView android:id="@+id/right_view" android:layout_width="match_parent" android:layout_height="match_parent"> </ExpandableListView> </LinearLayout>
Left xml:
<?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="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>
right xml:
<?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="wrap_content" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Right_title" android:textSize="20sp" /> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/right_recycler" > </android.support.v7.widget.RecyclerView> </LinearLayout>
//shopping:
<?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="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto"> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/shoppingview" android:padding="10dp" app:roundedCornerRadius="50dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/s_title" android:layout_toRightOf="@id/shoppingview" android:layout_marginLeft="20dp" /> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/shopping_recycler" > </android.support.v7.widget.RecyclerView> </LinearLayout>
//retrofit封装类
package myjd.jd.com.monikao.utils; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; 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); } }
//model:
package myjd.jd.com.monikao.fenlei.model; import myjd.jd.com.monikao.bean.LeftBean; import myjd.jd.com.monikao.bean.RightBean; import myjd.jd.com.monikao.service.Api; import myjd.jd.com.monikao.service.GetInterface; import myjd.jd.com.monikao.utils.RetrofitUnitl; import okhttp3.OkHttpClient; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class LeftModelImpl { LeftModel leftModel; public void setLeftModel(LeftModel leftModel) { this.leftModel = leftModel; } //左面请求 public void Left(){ //添加拦截器 OkHttpClient okHttpClient = new OkHttpClient.Builder() .build(); //请求数据 RetrofitUnitl.getInstance(Api.BAST,okHttpClient) .setCreate(GetInterface.class) .getLeft() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber<LeftBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(LeftBean leftBean) { leftModel.onLeft(leftBean); } }); } //右面请求 public void Right(int cont){ OkHttpClient ok = new OkHttpClient.Builder() .build(); RetrofitUnitl.getInstance(Api.BAST,ok) .setCreate(GetInterface.class) .getRight(cont) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber<RightBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(RightBean rightBean) { leftModel.onRight(rightBean); } }); } public interface LeftModel { void onLeft(LeftBean leftBean); void onRight(RightBean rightBean); } }
//presenter:
package myjd.jd.com.monikao.fenlei.presenter; import myjd.jd.com.monikao.MainActivity; import myjd.jd.com.monikao.bean.LeftBean; import myjd.jd.com.monikao.bean.RightBean; import myjd.jd.com.monikao.fenlei.model.LeftModelImpl; import myjd.jd.com.monikao.fenlei.view.FenView; public class LeftPresenterImpl implements LeftModelImpl.LeftModel { private FenView fenView; private LeftModelImpl leftModel; public LeftPresenterImpl(FenView fenView) { this.fenView=fenView; leftModel = new LeftModelImpl(); leftModel.setLeftModel(this); } @Override public void onLeft(LeftBean leftBean) { fenView.onLeftSuccess(leftBean); } @Override public void onRight(RightBean rightBean) { fenView.onRightSuccess(rightBean); } //左侧调用 public void ShowPer(){ leftModel.Left(); } // 右侧调用 public void FlShowYou(int cont){ leftModel.Right(cont); } }
//mainactivity:
package myjd.jd.com.monikao; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ExpandableListView; import com.facebook.drawee.backends.pipeline.Fresco; import butterknife.BindView; import butterknife.ButterKnife; import myjd.jd.com.monikao.adapter.LeftAdapter; import myjd.jd.com.monikao.adapter.RightAdapter; import myjd.jd.com.monikao.bean.LeftBean; import myjd.jd.com.monikao.bean.RightBean; import myjd.jd.com.monikao.fenlei.presenter.LeftPresenterImpl; import myjd.jd.com.monikao.fenlei.view.FenView; public class MainActivity extends AppCompatActivity implements FenView{ @BindView(R.id.left_view) RecyclerView leftView; @BindView(R.id.right_view) ExpandableListView rightView; private LeftPresenterImpl leftPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Fresco.initialize(this); setContentView(R.layout.activity_main); ButterKnife.bind(this); leftPresenter = new LeftPresenterImpl(this); leftPresenter.ShowPer(); leftPresenter.FlShowYou(1); } @Override public void onLeftSuccess(final LeftBean leftBean) { leftView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); //适配器 LeftAdapter adapter=new LeftAdapter(MainActivity.this,leftBean); leftView.setAdapter(adapter); adapter.setOnItemClickListener(new LeftAdapter.onItemClickListener() { @Override public void onItemClick(View view, int position) { int id = leftBean.getData().get(position).getCid(); leftPresenter.FlShowYou(id); } }); } @Override public void onRightSuccess(RightBean rightBean) { RightAdapter adapter=new RightAdapter(MainActivity.this,rightBean); rightView.setAdapter(adapter); int count = rightView.getCount(); for (int i = 0; i <count; i++) { rightView.expandGroup(i); } } }
//leftasapter
package myjd.jd.com.monikao.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 myjd.jd.com.monikao.R; import myjd.jd.com.monikao.bean.LeftBean; public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.ViewHolder>{ private Context context; private LeftBean leftBean; private onItemClickListener onItemClickListener; public LeftAdapter(Context context, LeftBean leftBean) { this.context = context; this.leftBean = leftBean; } public interface onItemClickListener{ void onItemClick(View view,int position); } public void setOnItemClickListener(LeftAdapter.onItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } @NonNull @Override public LeftAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.leftlayout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull final LeftAdapter.ViewHolder holder, int position) { holder.zuo_mz.setText(leftBean.getData().get(position).getName()); if(onItemClickListener!=null){ holder.zuo_mz.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int position = holder.getLayoutPosition(); onItemClickListener.onItemClick(holder.itemView,position); } }); } } @Override public int getItemCount() { return leftBean.getData().size(); } class ViewHolder extends RecyclerView.ViewHolder{ private TextView zuo_mz; public ViewHolder(View itemView) { super(itemView); zuo_mz = itemView.findViewById(R.id.zuo_mz); } } }
//rightadapter:
package myjd.jd.com.monikao.adapter; import android.content.Context; import android.content.Intent; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.TextView; import myjd.jd.com.monikao.R; import myjd.jd.com.monikao.ShoppingActivity; import myjd.jd.com.monikao.bean.RightBean; import retrofit2.http.POST; public class RightAdapter extends BaseExpandableListAdapter{ private Context context; private RightBean rightBean; public RightAdapter(Context context, RightBean rightBean) { this.context = context; this.rightBean = rightBean; } @Override public int getGroupCount() { return rightBean.getData().size(); } @Override public int getChildrenCount(int i) { return 1; } @Override public Object getGroup(int i) { return rightBean.getData().get(i); } @Override public Object getChild(int i, int i1) { return rightBean.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 true; } @Override public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) { View v = View.inflate(context, R.layout.rightlayout, null); TextView title=v.findViewById(R.id.Right_title); title.setText(rightBean.getData().get(i).getName()); return v; } @Override public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) { View v = View.inflate(context, R.layout.rightlayout, null); RecyclerView right_recycler=v.findViewById(R.id.right_recycler); right_recycler.setLayoutManager(new GridLayoutManager(context,3)); childAdapter chapter=new childAdapter(context,rightBean,i,i1); right_recycler.setAdapter(chapter); chapter.setOnItemCilckListener(new childAdapter.OnItemCilckListener() { @Override public void onItemClick(View view, int position) { Intent intent=new Intent(context,ShoppingActivity.class); context.startActivity(intent); } }); return v; } @Override public boolean isChildSelectable(int i, int i1) { return true; } }
//childrenadapter:
package myjd.jd.com.monikao.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.facebook.drawee.view.SimpleDraweeView; import myjd.jd.com.monikao.R; import myjd.jd.com.monikao.bean.RightBean; /** * Created by 小薇 on 2018/8/11. */ class childAdapter extends RecyclerView.Adapter<childAdapter.ViewHolder>{ private Context context; private RightBean rightBean; private int i,i1; public OnItemCilckListener onItemCilckListener; public childAdapter(Context context, RightBean rightBean, int i, int i1) { this.context = context; this.rightBean = rightBean; this.i = i; this.i1 = i1; } public interface OnItemCilckListener{ void onItemClick(View view,int position); } public void setOnItemCilckListener(OnItemCilckListener onItemCilckListener) { this.onItemCilckListener = onItemCilckListener; } @NonNull @Override public childAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.childlayout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull final childAdapter.ViewHolder holder, final int position) { holder.tv_child.setText(rightBean.getData().get(i).getList().get(i1).getName()); String path = rightBean.getData().get(i).getList().get(i1).getIcon().split("\\|")[0]; holder.img_child.setImageURI(path); if(onItemCilckListener!=null){ holder.img_child.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int layoutPosition = holder.getLayoutPosition(); onItemCilckListener.onItemClick(holder.itemView,position); } }); } } @Override public int getItemCount() { return rightBean.getData().get(i).getList().size(); } class ViewHolder extends RecyclerView.ViewHolder{ private SimpleDraweeView img_child; private TextView tv_child; public ViewHolder(View itemView) { super(itemView); img_child = itemView.findViewById(R.id.img_child); tv_child = itemView.findViewById(R.id.tv_child); } } }
//shoppingctivity
package myjd.jd.com.monikao; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import greendao.greeandaobeanDao; import myjd.jd.com.monikao.adapter.ShoppingAdapter; import myjd.jd.com.monikao.bean.ShoppingBean; import myjd.jd.com.monikao.bean.greeandaobean; import myjd.jd.com.monikao.shopping.presenter.ShoppingPresenterImpl; import myjd.jd.com.monikao.shopping.view.ShoppingView; import myjd.jd.com.monikao.utils.myApplication; public class ShoppingActivity extends AppCompatActivity implements ShoppingView{ @BindView(R.id.shopping_recycler) RecyclerView shoppingRecycler; private ShoppingPresenterImpl shoppingPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shopping); ButterKnife.bind(this); shoppingPresenter = new ShoppingPresenterImpl(this); shoppingPresenter.getData("笔记本",1); shoppingRecycler.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); } public greeandaobeanDao greeandaobeanDao(){ return myApplication.getApplication().getDaoSession().getGreeandaobeanDao(); } @Override public void onSuccess(ShoppingBean shoppingBean) { List<ShoppingBean.DataBean> data = shoppingBean.getData(); ShoppingAdapter adapter=new ShoppingAdapter(ShoppingActivity.this,data); shoppingRecycler.setAdapter(adapter); for (int i = 0; i < data.size(); i++) { greeandaobean greeandaobean = new greeandaobean(null,data.get(i).getTitle(),data.get(i).getPrice()); greeandaobeanDao().insert(greeandaobean); } //查询 greeandaobean load = greeandaobeanDao().load((long) 1f); Log.i("aaa",load.getName()); } @Override public void onError(int code) { } }
//model presenter view........
//shoppingadapter:
package myjd.jd.com.monikao.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.facebook.drawee.view.SimpleDraweeView; import java.util.List; import myjd.jd.com.monikao.R; import myjd.jd.com.monikao.bean.ShoppingBean; /** * Created by 小薇 on 2018/8/12. */ public class ShoppingAdapter extends RecyclerView.Adapter<ShoppingAdapter.ViewHolder>{ private Context context; private List<ShoppingBean.DataBean> dataBeans; public ShoppingAdapter(Context context, List<ShoppingBean.DataBean> dataBeans) { this.context = context; this.dataBeans = dataBeans; } @NonNull @Override public ShoppingAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.shoppinglayout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ShoppingAdapter.ViewHolder holder, int position) { holder.t_title.setText(dataBeans.get(position).getTitle()); String path = dataBeans.get(position).getImages().split("\\|")[0]; holder.ion.setImageURI(path); } @Override public int getItemCount() { return dataBeans.size(); } class ViewHolder extends RecyclerView.ViewHolder { private TextView t_title; private SimpleDraweeView ion; public ViewHolder(View itemView) { super(itemView); t_title = itemView.findViewById(R.id.s_title); ion = itemView.findViewById(R.id.shoppingview); } } }
//greenDao工具类
package myjd.jd.com.monikao.utils; import android.app.Application; import android.database.sqlite.SQLiteDatabase; import greendao.DaoMaster; import greendao.DaoSession; public class myApplication extends Application { private static myApplication application; private DaoMaster daoMaster; private DaoSession daoSession; public static myApplication getApplication(){ return application; } @Override public void onCreate() { super.onCreate(); application=this; createDb(); } private void createDb() { DaoMaster.DevOpenHelper devOpenHelper=new DaoMaster.DevOpenHelper(this,"greendao.db"); SQLiteDatabase db = devOpenHelper.getWritableDatabase(); daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); } public DaoSession getDaoSession(){ return daoSession; } }