一.菜谱收藏界面的设计与实现

1.项目简介

2.“收藏”/”取消收藏”按钮布局设计

3.1、数据库的设计

3.2、数据库的操作

4.收藏界面的布局设计

二.界面代码部分

1.recipe_detail.xml

加入一个Button控件即可。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="20dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_marginLeft="5dp"android:layout_gravity="center"><ImageViewandroid:layout_width="30dp"android:layout_height="30dp"android:src="@drawable/dot"android:layout_gravity="center"/><TextViewandroid:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="食材用料:"android:textColor="#0000ff"android:textSize="28sp"android:textStyle="bold"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/button_favorite"android:text="收藏"/></LinearLayout><android.support.v7.widget.RecyclerViewandroid:id="@+id/recy_view_yl"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:layout_gravity="center"/><Viewandroid:layout_width="match_parent"android:layout_height="2dp"android:layout_marginTop="10dp"android:layout_marginBottom="10dp"android:background="@color/colorAccent"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_marginLeft="5dp"android:layout_gravity="center"><ImageViewandroid:layout_width="30dp"android:layout_height="30dp"android:src="@drawable/dot"android:layout_gravity="center"/><TextViewandroid:id="@+id/text_zuofa"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="做法步骤:"android:textColor="#0000ff"android:textSize="28sp"android:textStyle="bold"/></LinearLayout><android.support.v7.widget.RecyclerViewandroid:id="@+id/recy_view_step"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:layout_gravity="center"/></LinearLayout>

2.fragment_two.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="您好,您收藏的菜谱信息如下:"android:textSize="25sp"android:textColor="#ff0000"/><android.support.v7.widget.RecyclerViewandroid:id="@+id/recy_view2"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>

3.recy_sc_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/sc_id"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="11"android:textSize="50sp"android:textColor="#000000"/><ImageViewandroid:id="@+id/sc_img"android:layout_width="80dp"android:layout_height="80dp"android:src="@mipmap/ic_launcher"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:layout_gravity="center"><TextViewandroid:id="@+id/sc_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:text=""android:textSize="20sp"android:textColor="#000000"/><TextViewandroid:id="@+id/sc_des"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""/></LinearLayout></LinearLayout>

三.代码部分

1.MyDBHelper.java

package com.example.cookbook;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;public class MyDBHelper extends SQLiteOpenHelper {//定义数据库的名称和数据库的版本号private static final String DBNAME = "zscourse1.db";private static final int VERSION = 1;//创建类的构造方法public  MyDBHelper(Context context){super(context,DBNAME,null,VERSION);}//重写onCreate()方法@Override//执行建表的操作public void onCreate(SQLiteDatabase db) {db.execSQL("create table tb_recipe(" +"id integer primary key autoincrement," +"recipeId varchar(50)," +"recipeName varchar(20)," +"recipeDesc varchar(20)," +"recipeSmallImgUrl varchar(100));");}//重写onUpgrade()方法@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

2.RecipeDetailActivity.java

package com.example.cookbook;import android.database.Cursor;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;import java.util.ArrayList;
import java.util.List;public class RecipeDetailActivity extends AppCompatActivity {RecyclerView recyclerView_yl;  //"食材用料"列表RecyclerView recyclerView_step;   //"做法步骤"列表JsonToBean.ShowapiResBodyBean.DatasBean  bean;  //存放上一个界面传递过来的数据Button button_favorite;  //“收藏”按钮boolean isFavorite = false; //代表该条数据是否已收藏MyDBHelper dbHelper;  //SQLite数据库帮助类的对象private void initView(){recyclerView_yl = findViewById(R.id.recy_view_yl);recyclerView_step = findViewById(R.id.recy_view_step);bean = (JsonToBean.ShowapiResBodyBean.DatasBean) getIntent().getSerializableExtra("data");dbHelper = new MyDBHelper(this);    //创建MyDBHelper类的对象button_favorite = findViewById(R.id.button_favorite);button_favorite.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if(isFavorite){dbHelper.getWritableDatabase().execSQL("DELETE FROM tb_recipe WHERE recipeId=?",new Object[]{bean.getId()});}else{dbHelper.getWritableDatabase().execSQL("INSERT INTO tb_recipe(recipeId,recipeName,recipeDesc,recipeSmallImgUrl) VALUES (?,?,?,?)",new Object[]{bean.getId(),bean.getCpName(),bean.getDes(),bean.getSmallImg()});}isFavorite = !isFavorite;button_favorite.setText(isFavorite?"取消收藏":"收藏");}});}//将数据动态更新到UI界面上private  void loadData(){List<JsonToBean.ShowapiResBodyBean.DatasBean.YlBean> arrlistyl = new ArrayList<>(bean.getYl());List<JsonToBean.ShowapiResBodyBean.DatasBean.StepsBean> arrliststep = new ArrayList<>(bean.getSteps());YlAdapter adapteryl = new YlAdapter(this, arrlistyl);StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);recyclerView_yl.setLayoutManager(layoutManager);recyclerView_yl.setAdapter(adapteryl);StepAdapter adapterstep = new StepAdapter(this, arrliststep);StaggeredGridLayoutManager layoutManager1 = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);recyclerView_step.setLayoutManager(layoutManager1);recyclerView_step.setAdapter(adapterstep);//判断当前菜谱是否已收藏Cursor cursor = dbHelper.getReadableDatabase().rawQuery("SELECT id FROM tb_recipe WHERE recipeId=?",new String[]{bean.getId()});isFavorite = cursor.getCount()>0;button_favorite.setText(isFavorite?"取消收藏":"收藏");cursor.close();}//重写onCreate()方法@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.recipe_detail);initView();loadData();}
}

3.CourseSCAdapter.java

package com.example.cookbook;import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;import java.io.IOException;
import java.util.List;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;public class CourseSCAdapter extends RecyclerView.Adapter<CourseSCAdapter.ViewHolder> {private Context ncontext;private List<JsonToBean.ShowapiResBodyBean.DatasBean> arrlist4;public CourseSCAdapter(Context ncontext, List<JsonToBean.ShowapiResBodyBean.DatasBean> arrlist4) {this.ncontext = ncontext;this.arrlist4 = arrlist4;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int i) {View view= LayoutInflater.from(ncontext).inflate(R.layout.recy_sc_item,parent,false);ViewHolder nholder=new ViewHolder(view);return nholder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {final JsonToBean.ShowapiResBodyBean.DatasBean courseInfo=arrlist4.get(i);viewHolder.sc_id.setText(i+1+"");Glide.with(ncontext).load(courseInfo.getSmallImg()).into(viewHolder.sc_img);viewHolder.sc_name.setText(courseInfo.getCpName());viewHolder.sc_des.setText(courseInfo.getDes());viewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//数据库里只存储了部分数据,需要使用时查询完整的数据String address = String.format("http://route.showapi.com/1164-1?showapi_appid=160511&type=%s&id=%s&showapi_sign=943d4b06fbf44191bba7a37d15fa3152", courseInfo.getType_v2(),courseInfo.getId());HttpUtil.sendOkHttpRequest(address,new Callback(){@Overridepublic void onResponse(Call call, Response response) throws IOException {String jsonStr = response.body().string();JsonToBean javaToBean = new Gson().fromJson(jsonStr,new TypeToken<JsonToBean>(){}.getType());JsonToBean.ShowapiResBodyBean showapiResBodyBean = javaToBean.getShowapi_res_body();List<JsonToBean.ShowapiResBodyBean.DatasBean> datasBeans = showapiResBodyBean.getDatas();Log.d("+++++++++++++++++",datasBeans.size()+"");//跳转页面的代码Intent intent=new Intent(ncontext, RecipeDetailActivity.class);intent.putExtra("data",datasBeans.get(0));ncontext.startActivity(intent);}@Overridepublic void onFailure( Call call, IOException e) {new Handler().post(new Runnable() {@Overridepublic void run() {Toast.makeText(ncontext, "数据查询失败", Toast.LENGTH_SHORT).show();}});}});}});}@Overridepublic int getItemCount() {return arrlist4.size();}//创建内部类ViewHolderpublic class ViewHolder extends RecyclerView.ViewHolder {TextView sc_id;ImageView sc_img;TextView sc_name;TextView sc_des;public ViewHolder(View itemView) {super(itemView);sc_id=itemView.findViewById(R.id.sc_id);sc_img=itemView.findViewById(R.id.sc_img);sc_name=itemView.findViewById(R.id.sc_name);sc_des=itemView.findViewById(R.id.sc_des);}}
}

4.TwoFragment.java

package com.example.cookbook;import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import java.util.ArrayList;public class TwoFragment extends Fragment {//定义JAVA对象private RecyclerView recy_view2;private MyDBHelper mhelper;  //数据库帮助类的对象,完成数据库、数据表的创建等private SQLiteDatabase db;  //数据库操作对象ArrayList<JsonToBean.ShowapiResBodyBean.DatasBean>  arrlist3;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_two,container,false);initView(view);return view;}private void initView(View view){//完成控件的绑定recy_view2 = view.findViewById(R.id.recy_view2);mhelper = new MyDBHelper(getActivity());db = mhelper.getWritableDatabase();}//重写onActivityCreated()方法,当用户进入收藏界面后,就会去执行该方法@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);initData();    //数据的初始化}private void initData(){//获取数据arrlist3 = new ArrayList<JsonToBean.ShowapiResBodyBean.DatasBean>();Cursor cursor = db.rawQuery("select * from tb_recipe", null);while (cursor.moveToNext()) {String name = cursor.getString(cursor.getColumnIndex("recipeName"));String resId = cursor.getString(cursor.getColumnIndex("recipeId"));String desc = cursor.getString(cursor.getColumnIndex("recipeDesc"));String smallImg = cursor.getString(cursor.getColumnIndex("recipeSmallImgUrl"));JsonToBean.ShowapiResBodyBean.DatasBean bean = new JsonToBean.ShowapiResBodyBean.DatasBean();bean.setCpName(name);bean.setId(resId);bean.setDes(desc);bean.setSmallImg(smallImg);arrlist3.add(bean);}cursor.close();//创建自定义适配器的对象CourseSCAdapter adapter = new CourseSCAdapter(getActivity(), arrlist3);//用网格布局管理器将数据显示出来StaggeredGridLayoutManager st = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);recy_view2.setLayoutManager(st);recy_view2.setAdapter(adapter);}@Overridepublic void onResume() {super.onResume();arrlist3.clear();initData();}
}

私厨菜谱app的设计与实现(四)相关推荐

  1. 私厨菜谱app的设计与实现(五)

    一.搜索界面的设计与实现 1.搜索界面的布局设计 2.结果界面的布局设计 3.搜索界面的功能设计 二.布局代码部分 1.fragment_one.xml 补充一个搜索栏 <?xml versio ...

  2. 私厨菜谱app的设计与实现(一)

    一.菜谱引导界面的设计与实现 1.项目介绍 2.引导界面的设计与功能 2.1.引导界面的布局设计 2.2.引导界面的功能设计 二.代码部分 1.activity_main.xml <?xml v ...

  3. 私厨菜谱app的设计与实现(六)

    一.个人中心的设计与实现 二.代码部分 1.fragment_three.xml <?xml version="1.0" encoding="utf-8" ...

  4. 私厨菜谱app的设计与实现(三)

    一.详情界面的功能设计 对上一篇文章的补充 1.要做到信息传输,需要序列化操作   //在JsonToBean中的所有类加上接口implements Serializable   //intent.p ...

  5. 2022-2027年中国菜谱app市场竞争态势及行业投资前景预测报告

    [报告类型]产业研究 [报告格式]电子+纸介版 [出品单位]华经产业研究院 本报告由华经产业研究院重磅推出,对中国菜谱app行业的发展现状.竞争格局及市场供需形势进行了具体分析,并从行业的政策环境.经 ...

  6. 毕业论文选题基于Web网站或Android APP的设计与实现

    一.基于Web的实验中心工作管理网站的设计与实现 二.基于Android的上课提醒APP的设计与实现 三.基于Android的健身管理APP的设计与实现 四.高校讲座信息APP的设计与实现 五.文本朗 ...

  7. 菜谱APP源码和设计报告

    <移动互联开发> 课程作业 学 院: 班 级: 学 号: 姓 名: 日 期: 设计要求(提交文档时需删除): 1.本课程设计作为<Android 程序设计>的期末考查内容. 2 ...

  8. 计算机毕业设计ssm网上私厨到家服务平台dp28s系统+程序+源码+lw+远程部署

    计算机毕业设计ssm网上私厨到家服务平台dp28s系统+程序+源码+lw+远程部署 计算机毕业设计ssm网上私厨到家服务平台dp28s系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S ...

  9. [任务书+论文+PPT+源码]基于Android与多媒体的英文学习APP的设计与实现

    第1页 毕业设计(论文)题目:基于ANDROID与多媒体技术的英文学习APP的设计与实现设计(论文)要求及原始数据(资料):1.综述国内外移动互联现状及前景:2.了解ANDROID系统,理解ANDRO ...

最新文章

  1. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.9. GIN 和 GiST 索引类型
  2. java基础:简单实现线程池
  3. 阿里要未来,百度要利益?
  4. 搜索推荐炼丹笔记:CVR预估中的延迟反馈问题
  5. HTML中三种定位relative,absolute,fixed后,盒子的百分比宽度及位置易错点
  6. fortran语法笔记
  7. iFit—Smart Cardio Equipment 简介与下载
  8. JVM 内存管理机制
  9. 数据结构与算法之二冒泡排序
  10. HTML知识积累及实践(一)- 标签样式
  11. 如何判断你和优秀AI算法工程师之间的差异?
  12. 风尚云网学习-前端页面敏感数据脱敏星号展示
  13. VBA代码翻译成Python调用示例
  14. 华为nova2s应用计算机,华为nova2s 如何打开多个应用 | 手游网游页游攻略大全
  15. pytorch中tensor转numpy
  16. 第三章 国外信托公司业务
  17. Arcgis中的坐标和投影
  18. visio 2010 技巧
  19. 字节跳动自研 Web 构建工具 Rspack 正式发布
  20. 电磁兼容八种测试的「实质」

热门文章

  1. stm32 每次复位启动RTC时间都会变慢
  2. C# 使用Emit动态注入代码,实现监控属性的目的
  3. 晶圆测试开发软件,晶圆级可靠性测试:器件开发的关键步骤
  4. R沟通|Bookdown中文书稿写作手册(下)
  5. 你的月薪等于多少个爽?(C语言实现)
  6. 字体大宝库:20款充满艺术感的高质量英文字体
  7. 华为鸿蒙os支持华为手机,华为鸿蒙 OS 2.0 发布,明年华为手机全面支持
  8. (附源码)spring boot图书管理系统 毕业设计 160934
  9. ARM 学习笔记之1: 必看的ARM 官方文档
  10. 【Flutter】Flutter 日期时间处理神器 Jiffy 入门指南