1.新建project

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

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

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

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

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

4.Bean存储

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

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

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

6.建立数据库

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

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

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

8.更改MainActivity中的onClick方法

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

    用Matlab求解微分方程 解微分方程有两种解,一种是解析解,一种是数值解,这两种分别对应不同的解法 解析解 利用dsolve函数进行求解 syms x; s = dsolve('eq1,eq2,.. ...

  2. filter,interceptor,controllerAdvice,aspect,controller执行顺序

    1.filter,这是java的过滤器,和框架无关的,是所有过滤组件中最外层的,从粒度来说是最大的. 配置方式,有直接实现Filter+@component,@Bean+@configuration( ...

  3. PTA 朋友圈 (25 分) 代码详解 (并查集)

    1.题目要求: 某学校有N个学生,形成M个俱乐部.每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈.一个学生可以同时属于若干个不同的俱乐部.根据"我的朋友的朋友也是我的朋友" ...

  4. linux 磁盘IO速度测试

    写入速度测试命令:time dd oflag=direct if=/dev/zero of=/data2/test bs=2k count=1000000 //if表示从哪里读取 of表示写入到哪里 ...

  5. Linux文件系统只读 解决方案:

    Linux系统Read-only file system,文件系统只读排查解决方案:文件系统只读机制:当文件系统自身的校验机制发现文件系统存在问题时,为避免文件系统受到进一步的损坏,系统会把文件系统设 ...

  6. MATLAB—信号与系统中的应用

    文章目录 一. 理论知识 1.线性系统的响应 2.微分方程的解 Ⅰ.经典解 Ⅱ.完全响应 3.零输入响应 4.零状态响应 5.冲激响应 6.阶跃响应 7.卷积求零状态响应 二.连续信号的MATLAB描 ...

  7. SpringBoot Spring Security 核心组件 认证流程 用户权限信息获取详细讲解

    前言 Spring Security 是一个安全框架, 可以简单地认为 Spring Security 是放在用户和 Spring 应用之间的一个安全屏障, 每一个 web 请求都先要经过 Sprin ...

  8. jenkins部署web项目

    Dockerfile FROM nginx:latest #MAINTAINER 维护者信息 MAINTAINER GosingWu 1649346712@qq.com ADD admin_test. ...

  9. .NET Core:处理全局异常

    一.前言 在程序设计中,我们会遇到各种各样的异常问题,一个好的异常处理解决方案能够帮助开发者快速的定位问题,也能够给用户更好的用户体验.那么我们在AspNetCore中该如何捕获和处理异常呢?我们以一 ...

  10. COM笔记-类厂

    CoCreateInstance实际上并没有直接创建COM组件 ,而是创建了一个被称作是类厂的组件.而所需的组件正是由些类厂创建的.类厂组件的唯一功能就创建其他的组件.创建组件的标准接口是IClass ...