安卓学习记录(四)——体温表APP
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的更多相关文章
- leveldb 学习记录(四)Log文件
前文记录 leveldb 学习记录(一) skiplistleveldb 学习记录(二) Sliceleveldb 学习记录(三) MemTable 与 Immutable Memtablelevel ...
- JavaScript学习记录四
title: JavaScript学习记录四 toc: true date: 2018-09-16 20:31:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...
- 4.VUE前端框架学习记录四:Vue组件化编码2
VUE前端框架学习记录四:Vue组件化编码2文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...
- leveldb 学习记录(四) skiplist补与变长数字
在leveldb 学习记录(一) skiplist 已经将skiplist的插入 查找等操作流程用图示说明 这里在介绍 下skiplist的代码 里面有几个模块 template<typenam ...
- 安卓学习记录(五)——体温表APP.2
一.项目结构 二.源码 1.数据层 db+dao+bean package com.example.tem.db; import android.content.Context; import and ...
- 安卓学习之学生签到APP(一)
一.学生定位签到页面 具体实现步骤: 1.1 高德地图申请key 1.创建新应用 进入高德地图api控制台,创建一个新应用.如果您之前已经创建过应用,可直接跳过这个步骤. 2.添加新Key 在创建的应 ...
- Spring学习记录(四)---bean之间的关系:继承、依赖
继承 这里说的继承和java的继承是不一样的,不是父类子类.但思想很相似,是父bean和子bean 1.父bean是一个实例时.它本身是一个完整的bean 2.父bean是模板,抽象bean ...
- Linux 学习记录 四(Bash 和 Shell scirpt)
一.什么是 Shell? 狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗口Bash等,广义的shell则包括 图形接口的软件,因为图形接口其实也可以操作各种驱动程序来呼叫核心进行工 ...
- 定时任务调度工作(学习记录 四)schedule与scheduleAtFixedRate的区别
根据两种情况来看区别 一.首次计划执行的时间早于当前的时间 1.schedule方法 “fixed-delay”:如果第一次执行时间被延迟了,随后的执行时间按照上一次实际执行完成的时间点进行计算 演示 ...
随机推荐
- git 强制放弃本地修改(新增、删除文件)
本地修改了一些文件,其中包含修改.新增.删除的. 不需要了,想要丢弃,于是做了git check -- .操作,但是只放弃了修改的文件,新增和删除的仍然没有恢复. 于是百度了下,使用如下命令: git ...
- Golang语言系列-03-流程控制语句
Go语言流程控制语句 Go语言中最常用的流程控制语句有 if 和 for ,没有像Python中的while语句.另外,Go语言还有switch和goto语句,不过这两个主要是用来简化代码的,属于扩展 ...
- 【笔记】初探KNN算法(2)
KNN算法(2) 机器学习算法封装 scikit-learn中的机器学习算法封装 在python chame中将算法写好 import numpy as np from math import sqr ...
- Dubbo系列讲解之服务注册【3万字长文分享】 23/100 发布文章
服务注册的几个步骤 对于RPC框架的服务注册,一般包含了如下的流程: 加载服务提供者,可能是通过xml配置的,也可能是通过扫描注解的 实例化服务提供者,并以服务接口作为key,实现类作为value ...
- docker 部署mysql连接问题
发现windows上有一个docker descktop(虽然不怎么好用), 安装之后准备直接用docker搭本地测试环境的基础设施(比如MySQL,Redis,MongoDB,ES啥的), 虽然比去 ...
- SpringBoot - 集成RocketMQ实现延迟消息队列
目录 前言 环境 具体实现 前言 RocketMQ是阿里巴巴在2012年开源的分布式消息中间件,记录下SpringBoot整合RocketMQ的方式,RocketMQ的安装可以查看:Windows下安 ...
- Centos7上yum安装redis
下载tar包 wget http://download.redis.io/releases/redis-6.0.5.tar.gz 解压tar包 tar -zxvf redis-6.0.5.tar.gz ...
- rocketmq知识点
消息队列mq 参考资料:https://www.jianshu.com/p/824066d70da8 一.消息中间件的主要作用和功能: 1)异步解耦和分流: 2)挡住前端的数据洪峰,保证后端系统的稳定 ...
- Kafka源码篇 --- 小白也能看懂的Producer的初始化及元数据获取流程
最近在研究kafka的源码,发现有些小伙伴的源码写的很不错,就想转载一下,让更多的人知道和学习一下. https://blog.csdn.net/weixin_43167418/article/det ...
- 使用Xshell连接虚机安装的vyOS
本文主要讲解:使用虚机(Vitual Box)安装的vyOS,如何使用Xshell来通过ssh方式连接. 首先咱们安装vyOS 1.安装vyOS 先用Vitual Box安装vyOS镜像. 接下来的操 ...