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;
}
}
本文详细介绍了一个Android应用中界面布局的设计与实现方法,并通过Retrofit框架实现了数据的网络请求和解析过程。从XML布局文件到Activity、Adapter的编写,再到使用RxJava进行异步数据加载,全面展示了Android应用开发流程。
7002

被折叠的 条评论
为什么被折叠?



