1.新建project

file->new->new project,选择Basic Activity

2.在content_main.xml中添加一个List View

  1. 1 <ListView
  2. 2 android:id="@+id/lv_main"
  3. 3 android:layout_width="wrap_content"
  4. 4 android:layout_height="wrap_content" />

3.绘制一个页面来展示数据(list_item.xml)

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3 android:layout_width="match_parent"
  4. 4 android:layout_height="80dp"
  5. 5 android:orientation="vertical">
  6. 6
  7. 7 <TextView
  8. 8 android:id="@+id/tv_name"
  9. 9 android:layout_width="150dp"
  10. 10 android:layout_height="80dp"
  11. 11 android:layout_marginLeft="10dp"
  12. 12 android:layout_alignParentLeft="true"
  13. 13 android:gravity="center"
  14. 14 android:singleLine="true"
  15. 15 android:textSize="35sp"
  16. 16 android:text="姓名"
  17. 17 android:ellipsize="marquee" />
  18. 18
  19. 19 <TextView
  20. 20 android:id="@+id/tv_date"
  21. 21 android:layout_width="wrap_content"
  22. 22 android:layout_height="80dp"
  23. 23 android:layout_toRightOf="@+id/tv_name"
  24. 24 android:layout_marginLeft="15dp"
  25. 25 android:textSize="20sp"
  26. 26 android:gravity="center"
  27. 27 android:text="日期"/>
  28. 28
  29. 29 <TextView
  30. 30 android:id="@+id/tv_bodyTem"
  31. 31 android:layout_width="wrap_content"
  32. 32 android:layout_height="80dp"
  33. 33 android:text="体温"
  34. 34 android:textSize="30sp"
  35. 35 android:layout_marginRight="20dp"
  36. 36 android:layout_alignParentRight="true"
  37. 37 android:gravity="center"/>
  38. 38
  39. 39
  40. 40 </RelativeLayout>

4.Bean存储

  1. 1 package com.example.tem;
  2. 2
  3. 3 import java.io.Serializable;
  4. 4
  5. 5 public class TemBean implements Serializable{
  6. 6
  7. 7 public String name;
  8. 8 public String date;
  9. 9 public String bodyTem;
  10. 10
  11. 11 @Override
  12. 12 public String toString() {
  13. 13 return "TemBean{" +
  14. 14 "name='" + name + '\'' +
  15. 15 ", date='" + date + '\'' +
  16. 16 ", bodyTem='" + bodyTem + '\'' +
  17. 17 '}';
  18. 18 }
  19. 19
  20. 20 public String getName() {
  21. 21 return name;
  22. 22 }
  23. 23
  24. 24 public void setName(String name) {
  25. 25 this.name = name;
  26. 26 }
  27. 27
  28. 28 public String getDate() {
  29. 29 return date;
  30. 30 }
  31. 31
  32. 32 public void setDate(String date) {
  33. 33 this.date = date;
  34. 34 }
  35. 35
  36. 36 public String getBodyTem() {
  37. 37 return bodyTem;
  38. 38 }
  39. 39
  40. 40 public void setBodyTem(String bodyTem) {
  41. 41 this.bodyTem = bodyTem;
  42. 42 }
  43. 43
  44. 44 }

5.编写适配器(什么是适配器“https://blog.csdn.net/geekmubai/article/details/89297238”)

  1. 1 package com.example.tem;
  2. 2
  3. 3 import android.content.Context;
  4. 4 import android.view.LayoutInflater;
  5. 5 import android.view.View;
  6. 6 import android.view.ViewGroup;
  7. 7 import android.widget.BaseAdapter;
  8. 8 import android.widget.TextView;
  9. 9
  10. 10 import java.util.List;
  11. 11
  12. 12 public class TemListAdapter extends BaseAdapter{
  13. 13 private List<TemBean> mlist;
  14. 14 private Context mContext;
  15. 15 private LayoutInflater mlayoutInflater;
  16. 16 public TemListAdapter(Context context, List<TemBean> list){
  17. 17 mContext=context;
  18. 18 mlist=list;
  19. 19 mlayoutInflater=LayoutInflater.from(context);
  20. 20 }
  21. 21 @Override
  22. 22 public int getCount() {
  23. 23 return mlist.size();
  24. 24 }
  25. 25
  26. 26 @Override
  27. 27 public Object getItem(int position) {
  28. 28 return mlist.get(position);
  29. 29 }
  30. 30
  31. 31 @Override
  32. 32 public long getItemId(int position) {
  33. 33 return position;
  34. 34 }
  35. 35
  36. 36 @Override
  37. 37 public View getView(int position, View convertView, ViewGroup parent) {
  38. 38 ViewHolder viewHolder;
  39. 39 if(convertView==null)
  40. 40 {
  41. 41 viewHolder=new ViewHolder();
  42. 42 convertView=mlayoutInflater.inflate(R.layout.list_item,null);
  43. 43 viewHolder.mTvName=convertView.findViewById(R.id.tv_name);
  44. 44 viewHolder.mTvDate=convertView.findViewById(R.id.tv_date);
  45. 45 viewHolder.mTvBodyTem=convertView.findViewById(R.id.tv_bodyTem);
  46. 46 convertView.setTag(viewHolder);
  47. 47 }else{
  48. 48 viewHolder=(ViewHolder) convertView.getTag();
  49. 49 }
  50. 50 TemBean bean=mlist.get(position);
  51. 51 viewHolder.mTvName.setText(bean.name);
  52. 52 viewHolder.mTvDate.setText(bean.date);
  53. 53 viewHolder.mTvBodyTem.setText(bean.bodyTem);
  54. 54 return convertView;
  55. 55 }
  56. 56
  57. 57 private static class ViewHolder{
  58. 58 public TextView mTvName;
  59. 59 public TextView mTvDate;
  60. 60 public TextView mTvBodyTem;
  61. 61 }
  62. 62 }

6.建立数据库

  1. 1 package com.example.tem;
  2. 2
  3. 3 import android.content.ContentValues;
  4. 4 import android.content.Context;
  5. 5 import android.database.Cursor;
  6. 6 import android.database.sqlite.SQLiteDatabase;
  7. 7 import android.database.sqlite.SQLiteOpenHelper;
  8. 8
  9. 9 import androidx.annotation.Nullable;
  10. 10
  11. 11 public class DatabaseHelper extends SQLiteOpenHelper {
  12. 12 public static final String NAME = "name";
  13. 13 public static final String DATE = "date";
  14. 14 public static final String BODYTEM = "bodytem";
  15. 15 public static final String TemPost = "tempost";//数据表名
  16. 16
  17. 17 public DatabaseHelper(@Nullable Context context) {
  18. 18 super(context, "temperature", null, 1);//数据库名
  19. 19 }
  20. 20
  21. 21 @Override
  22. 22 public void onCreate(SQLiteDatabase db) {
  23. 23 db.execSQL("create table if not exists TemPost("+
  24. 24 "id integer primary key, "+
  25. 25 "name varchar, "+
  26. 26 "date varchar, "+
  27. 27 "bodytem varchar)");
  28. 28 }
  29. 29 public void insertTem(TemBean TemBean){//增
  30. 30 SQLiteDatabase database=getWritableDatabase();
  31. 31 ContentValues cv=new ContentValues();
  32. 32 cv.put(NAME,TemBean.name);
  33. 33 cv.put(DATE,TemBean.date);
  34. 34 cv.put(BODYTEM,TemBean.bodyTem);
  35. 35 database.insert(TemPost,null,cv);
  36. 36 }
  37. 37 public Cursor getAllTemData(){//查
  38. 38 SQLiteDatabase database=getWritableDatabase();
  39. 39 return database.query("TemPost",null,null,null,null,null,"DATE"+" ASC");
  40. 40 }
  41. 41 public void deleteAllData(){//删
  42. 42 SQLiteDatabase database=getWritableDatabase();
  43. 43 database.delete("TemPost",null,null);
  44. 44 }
  45. 45
  46. 46 @Override
  47. 47 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  48. 48 }
  49. 49
  50. 50 }

7.使用fab图标的click弹出填写界面,先做界面(new_tem_data.xml)

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3 android:orientation="vertical"
  4. 4 android:layout_width="match_parent"
  5. 5 android:layout_height="match_parent"
  6. 6 android:gravity="center">
  7. 7
  8. 8 <EditText
  9. 9 android:id="@+id/et_tem_name"
  10. 10 android:layout_width="match_parent"
  11. 11 android:layout_height="wrap_content"
  12. 12 android:layout_margin="4dp"
  13. 13 android:hint="姓名"/>
  14. 14
  15. 15 <EditText
  16. 16 android:id="@+id/et_tem_bodytem"
  17. 17 android:layout_width="match_parent"
  18. 18 android:layout_height="wrap_content"
  19. 19 android:layout_margin="4dp"
  20. 20 android:hint="体温"/>
  21. 21 <DatePicker
  22. 22 android:id="@+id/dp_tem_date"
  23. 23 android:layout_width="wrap_content"
  24. 24 android:layout_height="wrap_content"
  25. 25 android:layout_margin="4dp"
  26. 26 android:datePickerMode="spinner"
  27. 27 android:calendarViewShown="false"/>
  28. 28
  29. 29 </LinearLayout>

8.更改MainActivity中的onClick方法

  1. 1 package com.example.tem;
  2. 2
  3. 3 import android.content.DialogInterface;
  4. 4 import android.content.Intent;
  5. 5 import android.database.Cursor;
  6. 6 import android.os.Bundle;
  7. 7
  8. 8 import com.google.android.material.floatingactionbutton.FloatingActionButton;
  9. 9 import com.google.android.material.snackbar.Snackbar;
  10. 10
  11. 11 import androidx.appcompat.app.AlertDialog;
  12. 12 import androidx.appcompat.app.AppCompatActivity;
  13. 13 import androidx.appcompat.widget.Toolbar;
  14. 14
  15. 15 import android.os.Parcelable;
  16. 16 import android.view.LayoutInflater;
  17. 17 import android.view.View;
  18. 18 import android.view.Menu;
  19. 19 import android.view.MenuItem;
  20. 20 import android.widget.DatePicker;
  21. 21 import android.widget.EditText;
  22. 22 import android.widget.ListView;
  23. 23
  24. 24 import java.io.Serializable;
  25. 25 import java.util.ArrayList;
  26. 26 import java.util.List;
  27. 27
  28. 28 public class MainActivity extends AppCompatActivity {
  29. 29 private List<TemBean> mTemBeanList;
  30. 30 private DatabaseHelper mdatabaseHelper;
  31. 31 private TemListAdapter mAdapter;
  32. 32
  33. 33 @Override
  34. 34 protected void onCreate(Bundle savedInstanceState) {
  35. 35 super.onCreate(savedInstanceState);
  36. 36 setContentView(R.layout.activity_main);
  37. 37 Toolbar toolbar = findViewById(R.id.toolbar);
  38. 38 setSupportActionBar(toolbar);
  39. 39
  40. 40
  41. 41 mdatabaseHelper=new DatabaseHelper(this);
  42. 42 mTemBeanList=new ArrayList<>();
  43. 43 ListView temList=(ListView)findViewById(R.id.lv_main);
  44. 44 initTemData();
  45. 45 mAdapter = new TemListAdapter(this,mTemBeanList);
  46. 46 temList.setAdapter(mAdapter);
  47. 47
  48. 48 FloatingActionButton fab = findViewById(R.id.fab);
  49. 49 fab.setOnClickListener(new View.OnClickListener() {
  50. 50 @Override
  51. 51 public void onClick(View view) {
  52. 52 AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
  53. 53 LayoutInflater inflater=LayoutInflater.from(MainActivity.this);
  54. 54 View viewDialog=inflater.inflate(R.layout.new_tem_data,null);
  55. 55 final EditText name=(EditText) viewDialog.findViewById(R.id.et_tem_name);
  56. 56 final EditText bodytem=(EditText)viewDialog.findViewById(R.id.et_tem_bodytem);
  57. 57 final DatePicker date=(DatePicker) viewDialog.findViewById(R.id.dp_tem_date);
  58. 58 builder.setView(viewDialog);
  59. 59 builder.setTitle("填写体温");
  60. 60 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
  61. 61 @Override
  62. 62 public void onClick(DialogInterface dialog, int which) {
  63. 63 TemBean temBean=new TemBean();
  64. 64 temBean.name=name.getText().toString();
  65. 65 temBean.bodyTem=bodytem.getText().toString();
  66. 66 temBean.date=date.getYear()+"-"+(date.getMonth()+1)+"-"+date.getDayOfMonth();
  67. 67 mdatabaseHelper.insertTem(temBean);
  68. 68 mTemBeanList.add(temBean);
  69. 69 mAdapter.notifyDataSetChanged();
  70. 70 }
  71. 71 });
  72. 72 builder.setNegativeButton("Cancel",null);//点击取消
  73. 73 builder.create().show();//显示dialog的布局
  74. 74 }
  75. 75 });
  76. 76 }
  77. 77
  78. 78 private void initTemData() {
  79. 79 Cursor cursor=mdatabaseHelper.getAllTemData();
  80. 80 if(cursor!=null){
  81. 81 while(cursor.moveToNext()){
  82. 82 TemBean temBean1=new TemBean();
  83. 83 temBean1.name=cursor.getString(cursor.getColumnIndex("name"));
  84. 84 temBean1.date=cursor.getString(cursor.getColumnIndex("date"));
  85. 85 temBean1.bodyTem=cursor.getString(cursor.getColumnIndex("bodytem"));
  86. 86 mTemBeanList.add(temBean1);
  87. 87 }
  88. 88 cursor.close();
  89. 89 }
  90. 90 }
  91. 91
  92. 92 @Override
  93. 93 public boolean onCreateOptionsMenu(Menu menu) {
  94. 94 // Inflate the menu; this adds items to the action bar if it is present.
  95. 95 getMenuInflater().inflate(R.menu.menu_main, menu);
  96. 96 return true;
  97. 97 }
  98. 98
  99. 99 @Override
  100. 100 public boolean onOptionsItemSelected(MenuItem item) {
  101. 101 // Handle action bar item clicks here. The action bar will
  102. 102 // automatically handle clicks on the Home/Up button, so long
  103. 103 // as you specify a parent activity in AndroidManifest.xml.
  104. 104 int id = item.getItemId();
  105. 105
  106. 106 //noinspection SimplifiableIfStatement
  107. 107 if (id == R.id.action_settings) {
  108. 108 return true;
  109. 109 }
  110. 110
  111. 111 return super.onOptionsItemSelected(item);
  112. 112 }
  113. 113 }

MainActivity.java

完成

效果图:

安卓学习记录(四)——体温表APP的更多相关文章

  1. leveldb 学习记录(四)Log文件

    前文记录 leveldb 学习记录(一) skiplistleveldb 学习记录(二) Sliceleveldb 学习记录(三) MemTable 与 Immutable Memtablelevel ...

  2. JavaScript学习记录四

    title: JavaScript学习记录四 toc: true date: 2018-09-16 20:31:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  3. 4.VUE前端框架学习记录四:Vue组件化编码2

    VUE前端框架学习记录四:Vue组件化编码2文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  4. leveldb 学习记录(四) skiplist补与变长数字

    在leveldb 学习记录(一) skiplist 已经将skiplist的插入 查找等操作流程用图示说明 这里在介绍 下skiplist的代码 里面有几个模块 template<typenam ...

  5. 安卓学习记录(五)——体温表APP.2

    一.项目结构 二.源码 1.数据层 db+dao+bean package com.example.tem.db; import android.content.Context; import and ...

  6. 安卓学习之学生签到APP(一)

    一.学生定位签到页面 具体实现步骤: 1.1 高德地图申请key 1.创建新应用 进入高德地图api控制台,创建一个新应用.如果您之前已经创建过应用,可直接跳过这个步骤. 2.添加新Key 在创建的应 ...

  7. Spring学习记录(四)---bean之间的关系:继承、依赖

         继承 这里说的继承和java的继承是不一样的,不是父类子类.但思想很相似,是父bean和子bean 1.父bean是一个实例时.它本身是一个完整的bean 2.父bean是模板,抽象bean ...

  8. Linux 学习记录 四(Bash 和 Shell scirpt)

    一.什么是 Shell? 狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗口Bash等,广义的shell则包括 图形接口的软件,因为图形接口其实也可以操作各种驱动程序来呼叫核心进行工 ...

  9. 定时任务调度工作(学习记录 四)schedule与scheduleAtFixedRate的区别

    根据两种情况来看区别 一.首次计划执行的时间早于当前的时间 1.schedule方法 “fixed-delay”:如果第一次执行时间被延迟了,随后的执行时间按照上一次实际执行完成的时间点进行计算 演示 ...

随机推荐

  1. Nginx配置websocket的安全协议wss

    //nginx配置wss访问方式 map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream webso ...

  2. docker-03

    Docker构建私有registry(仓库) #1 启动registry [root@docker ~]# docker run -d -p 5000:5000 --restart=always -- ...

  3. MySQL索引篇之索引存储模型

      本文重点介绍下索引的存储模型 二分查找   给定一个1~100的自然数,给你5次机会,你能猜中这个数字吗? 你会从多少开始猜?   为什么一定是50呢?这个就是二分查找的一种思想,也叫折半查找,每 ...

  4. 高性能 C++ HTTP 客户端原理与实现

    一.什么是Http Client Http协议,是全互联网共同的语言,而Http Client,可以说是我们需要从互联网世界获取数据的最基本方法,它本质上是一个URL到一个网页的转换过程.而有了基本的 ...

  5. 关于c#:如何在不同的命名空间中处理相同的类名?

    How to handle same class name in different namespaces? 我正在尝试创建一个通用的库结构. 我通过为我想要的每个公共库创建单独的项目来做到这一点 我 ...

  6. C#多线程---I/O线程实现异步请求

    一.场景 利用I/O线程来模拟浏览器对服务器请求的异步操作. 二.例子 1 using System; 2 using System.Collections.Generic; 3 using Syst ...

  7. Map 综述(四):彻头彻尾理解 HashTable

    摘要: Hashtable与HashMap都是Map族中较为常用的实现,也都是Java Collection Framework 的重要成员,它们的本质都是 链表数组.本文深入JDK源码并从定义.构造 ...

  8. DeltaLake数据湖解决方案

    Delta Lake 是DataBricks公司推出的一种数据湖解决方案,Delta为该方案的核心组件.围绕数据流走向(数据入湖从流入数据湖.数据组织管理.数据查询到流出数据湖)推出了一系列功能特性, ...

  9. springcloud<zuul过滤器简单配置与跨域设置>

    package com.wangbiao.config; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.Req ...

  10. 【WPF】 OxyPlot图表控件学习

    最近在学习OxyPlot图表控件,一些基本的学习心得,在这里记录一下,方便以后进行查找.   一.引用 OxyPlot控件可以直接在VS的 " Nuget " 里面下载   选择: ...