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. tomcat下载、安装及配置

    一,下载Tomcat 1.进入官网Http://tomcat.apache.org/,选择download,下载所需要的Tomcat版本. 注意有zip和exe两种格式的 zip(64-bit Win ...

  2. 谈谈 Nginx 那点事【一】

    为什么突然决定总结Nginx ? 不知不觉8月份又要过完了,时间真是个无情的崽种. 写Nginx 首先,主要源于最近项目部署工作中和公司技术中心的人对接部署相关事宜流程太繁琐了.每个部门有各自的工作安 ...

  3. jvm调优命令

    JDK监控和故障jps,jstat,jmap,jhat,jstack.jinfo jps ,JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程. jstat ...

  4. RHEL 7 “There are no enabled repos” 的解决方法

    RHEL 7 "There are no enabled repos"  的解决方法 [root@system1 Desktop]# yum install squidLoaded ...

  5. C# lock的语法糖原理--《.net core 底层入门》之自旋锁,互斥锁,混合锁,读写锁

    在多线程环境中,多个线程可能会同时访问同一个资源,为了避免访问发生冲突,可以根据访问的复杂程度采取不同的措施 原子操作适用于简单的单个操作,无锁算法适用于相对简单的一连串操作,而线程锁适用于复杂的一连 ...

  6. jQuery中的基本过滤选择器(四、三)::first、:last、:not() ... ...

    <!DOCTYPE html> <html> <head> <title>基本过滤选择器</title> <meta http-equ ...

  7. 简陋的Excel到MYSQL的数据传输JAVA实现

    实现从excel读取数据,使用的是jxl.jar(到处都有,请大家随意下载),其中封装好了通过excel提供的接口,对excel中的数据库进行读取的实现: 先为了熟悉其中的方法使用,做了以下的测试: ...

  8. git《一》

    org.eclipse.jgit.api.errors.TransportException: https://gitee.com/wbweb/springboot_vue.git: Authenti ...

  9. tensorflow saver简介+Demo with linear-model

    tf.train.Saver提供Save和Restore Tensorflow变量的功能,常用于保存.还原模型训练结果,这在自己的训练和迁移学习中都很有用. 训练.保存脚本: import tenso ...

  10. 【SpringMVC】RESTFul简介以及案例实现

    RESTful 概念 REST:Representational State Transfer,表现层资源状态转移. 资源 资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成.每个资源 ...