工具类
//1.连接地址 private static String BASE_URL="https://apis.juhe.cn/"; private Retrofit retrofit; //2.私有方法 private static class SingleHolder{ private static final RetrofitManager INSTSENCE=new RetrofitManager(BASE_URL); } //3. private RetrofitManager(String baseUrl) { retrofit=new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(buildOkHttpClient()) .build(); } //4. private OkHttpClient buildOkHttpClient() { return new OkHttpClient.Builder() .connectTimeout(5000, TimeUnit.MILLISECONDS) .readTimeout(5000,TimeUnit.MILLISECONDS) .writeTimeout(5000,TimeUnit.MILLISECONDS) .build(); } //5.公共方法 public static RetrofitManager getDefault(){ return SingleHolder.INSTSENCE; } //6. public<T> T creat(Class<T> clazz){ return retrofit.create(clazz); } }
一,API
@GET("") Observable<HomeBean> menue(@Url String url);
二,Model
public Observable<HomeBean> menu(String url){ return RetrofitManager.getDefault().creat(HomeApi.class).menue(url); }
三,Presenter
public class HomePresenter extends BasePresenter<HomeView> { private HomeModel homeModel; public HomePresenter(HomeView view) { super(view); } @Override protected void initModel() { homeModel = new HomeModel(); } public void menue(String menu){ homeModel.menu(HttpConfig.urk+menu) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<HomeBean>() { @Override public void onSubscribe(Disposable d) { compositeDisposable.add(d); } @Override public void onNext(HomeBean homeBean) { if(view!=null){ view.getSuccess(homeBean); } } @Override public void onError(Throwable e) { if(view!=null){ view.getError(e.toString()); } } @Override public void onComplete() { } }); } }
四,MainActivity
public class MainActivity extends BaseActivity<HomePresenter> implements HomeView, View.OnClickListener { private static final String TAG = "MainActivity====="; private EditText editText; private Button button,button_clear; private FlowLayout flowLayout; @Override protected void initListener() { } @Override protected void initData() { } @Override protected void initview() { editText = findViewById(R.id.edittext); button = findViewById(R.id.button1); button_clear=findViewById(R.id.button2); flowLayout = findViewById(R.id.flowlayout); button.setOnClickListener(this); button_clear.setOnClickListener(this); } @Override protected HomePresenter presenterById() { return presenter = new HomePresenter(this); } @Override protected int setView() { return R.layout.activity_main; } @Override public void getSuccess(HomeBean homeBean) { Log.d(TAG, "首页成功: "+homeBean); Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show(); } @Override public void getError(String e) { Log.d(TAG, "首页失败: "+e.toString()); Toast.makeText(MainActivity.this,"失败",Toast.LENGTH_LONG).show(); } @Override public Context context() { return this; } @Override public void onClick(View v) { switch (v.getId()){ case R.id.button1: String content=editText.getText().toString(); if(TextUtils.isEmpty(content)){ Toast.makeText(MainActivity.this, "main不能为空", Toast.LENGTH_SHORT).show(); }else{ TextView textView = new TextView(this); textView.setText(content); textView.setTextColor(Color.BLACK); textView.setPadding(10, 10, 10, 10); flowLayout.addView(textView); presenter.menue(content); Intent intent = new Intent(MainActivity.this,MenuActivity.class); intent.putExtra("name",content); startActivity(intent); } break; case R.id.button2: //清空全部内容 button_clear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { flowLayout.removeAllViews(); } }); break; } } }
五,点击调到西红柿
public class MenuActivity extends BaseActivity<HomePresenter> implements HomeView { private RecyclerView recyclerView; private MyAdapter myAdapter; private PresonDao presonDao; @Override protected void initListener() { } @Override protected void initData() { } @Override protected void initview() { recyclerView = findViewById(R.id.menu_recyc); Intent intent = getIntent(); String name = intent.getStringExtra("name"); Toast.makeText(MenuActivity.this,name,Toast.LENGTH_LONG).show(); presenter.menue(name); //获取pressonDao MyManager myManager = MyManager.getMyManager(MenuActivity.this); presonDao = myManager.getDaoSession().getPresonDao(); } @Override protected HomePresenter presenterById() { return presenter = new HomePresenter(this); } @Override protected int setView() { return R.layout.activity_menu; } @Override public void getSuccess(HomeBean homeBean) { List<HomeBean.ResultBean.DataBean> data = homeBean.getResult().getData(); myAdapter = new MyAdapter(MenuActivity.this,data); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setAdapter(myAdapter); //点击事件 myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void onItemClick(String title, List<HomeBean.ResultBean.DataBean.StepsBean> step, View view, int position) { ArrayList<String> pic=new ArrayList<>(); ArrayList<String> stepq=new ArrayList<>(); for (int i=0;i<step.size();i++){ String img = step.get(i).getImg(); String step1 = step.get(i).getStep(); pic.add(img); stepq.add(step1); } Log.e("tag", "onItemClick:+++++++++++++ "+pic.size() ); Intent it=new Intent(MenuActivity.this,XiangQing.class); it.putStringArrayListExtra("images",pic); it.putStringArrayListExtra("stepq",stepq); /*it.putExtra("title",title);*/ presonDao.insert(new Preson(null, title)); startActivity(it); } }); //添加分割线 DividerItemDecoration dividerItemDecoration=new DividerItemDecoration(this,DividerItemDecoration.VERTICAL); //设置分割线的颜色 dividerItemDecoration.setDrawable(getResources().getDrawable(R.drawable.shape)); recyclerView.addItemDecoration(dividerItemDecoration); } @Override public void getError(String e) { } @Override public Context context() { return context(); } }
六,菜单调到详情页面
public class XiangQing extends AppCompatActivity { private PresonDao presonDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_xiang_qing); initView(); } private void initView() { presonDao = MyManager.getMyManager(XiangQing.this).getDaoSession().getPresonDao(); Intent intent = getIntent(); final ArrayList<String> images = intent.getStringArrayListExtra("images"); ArrayList<String> stepq = intent.getStringArrayListExtra("stepq"); /* String title = intent.getStringExtra("title");*/ Log.e("tag", "onCreate: "+images.size()); /* Log.e("tag", "onCreate: "+title);*/ List<Preson> list = presonDao.queryBuilder() .build().list(); TextView textView =findViewById(R.id.xiang_qing_title); textView.setText(list.get(0).getCooName()); XBanner mXBanner = (XBanner) findViewById(R.id.xbanner); mXBanner.setData(R.layout.image_fresco,images,stepq); //加载广告图片 mXBanner.loadImage(new XBanner.XBannerAdapter() { @Override public void loadBanner(XBanner banner, Object model, View view, int position) { //1、此处使用的Glide加载图片,可自行替换自己项目中的图片加载框架 //2、返回的图片路径为Object类型,你只需要强转成你传输的类型就行,切记不要胡乱强转! SimpleDraweeView viewById = view.findViewById(R.id.image_sime); viewById.setImageURI(images.get(position)); } }); } }
七,FlowLayout
public class FlowLayout extends ViewGroup { public FlowLayout(Context context) { super(context); } public FlowLayout(Context context, AttributeSet attrs) { this(context, attrs,0); } public FlowLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); //测量所有孩子的宽高 measureChildren(widthMeasureSpec, heightMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec);//AT-MOST int heightSize = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(widthSize, heightSize); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int lineWidth = 0; int totalHeight = 0;//累加的高度 View childView; int childWidth = 0; int childHeight = 0; for (int i = 0; i < getChildCount(); i++) { childView = getChildAt(i); childWidth = childView.getMeasuredWidth(); childHeight = childView.getMeasuredHeight(); //测量布局的宽 //换行/不换行 if (childWidth + lineWidth > getMeasuredWidth()) { //换行 totalHeight += childHeight; lineWidth = 0; childViewLayout(childView, lineWidth, totalHeight, lineWidth + childWidth, totalHeight + childHeight); //第一个 lineWidth = childWidth; } else { //不换行 childViewLayout(childView, lineWidth, totalHeight, lineWidth + childWidth, totalHeight + childHeight); lineWidth += childWidth; } } } private void childViewLayout(View childView, int lineWidth, int totalHeight, int i, int i1) { childView.layout(lineWidth, totalHeight, i, i1); } }
八,适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{ private Context context; private List<HomeBean.ResultBean.DataBean> list; private static final String TAG = "MyAdapter"; public MyAdapter(Context context, List<HomeBean.ResultBean.DataBean> list) { this.context = context; this.list = list; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.adapter, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) { List<HomeBean.ResultBean.DataBean.StepsBean> steps = list.get(position).getSteps(); List<String> albums = list.get(position).getAlbums(); holder.simpleDraweeView.setImageURI(albums.get(0)); Log.d(TAG, "8888888888888: "+list.get(position).getTitle()); holder.textView1.setText(list.get(position).getTitle()); holder.textView2.setText(list.get(position).getTags()); holder.simpleDraweeView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String title = list.get(position).getTitle(); List<HomeBean.ResultBean.DataBean.StepsBean> steps = list.get(position).getSteps(); onItemClickListener.onItemClick(title,steps,v,position); if(onItemClickListener!=null){ onItemClickListener.onItemClick(title,steps,v,position); } } }); } @Override public int getItemCount() { return list.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { private SimpleDraweeView simpleDraweeView; private TextView textView1,textView2; public MyViewHolder(View itemView) { super(itemView); simpleDraweeView=itemView.findViewById(R.id.simpledrawee); textView1=itemView.findViewById(R.id.title1); textView2=itemView.findViewById(R.id.title2); } } private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } public interface OnItemClickListener { void onItemClick(String title,List<HomeBean.ResultBean.DataBean.StepsBean> step,View view, int position); } }
九 数据库person
@Entity(nameInDb = "preson") public class Preson { @Id(autoincrement = true) private Long id; private String CooName; @Generated(hash = 1426502220) public Preson(Long id, String CooName) { this.id = id; this.CooName = CooName; } @Generated(hash = 1290113423) public Preson() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getCooName() { return this.CooName; } public void setCooName(String CooName) { this.CooName = CooName; } }
十,MyManager
public class MyManager { private static MyManager myManager; private DaoSession daoSession; private MyManager(Context context) { this.daoSession= DaoMaster.newDevSession(context,"my.db"); } public static MyManager getMyManager(Context context) { if (myManager == null){ synchronized (MyManager.class){ if (myManager == null){ myManager=new MyManager(context); } } } return myManager; } public DaoSession getDaoSession() { return daoSession; } }