安卓学习记录(四)——体温表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”:如果第一次执行时间被延迟了,随后的执行时间按照上一次实际执行完成的时间点进行计算 演示 ...
随机推荐
- JS实现自定义工具类,隔行换色、复选框全选、隔行高亮等
很多功能都可以放在js的工具类中,在使用的时候直接调用 本次实现的功能包括: /** 0.当点击表的整行的任意位置时,第一列的复选框或者单选框均选中 1.隔行换色 2.复选框的全选效果 3.实现表格 ...
- windows的基本命令和环境配置
刚开始学的时候整理的基本知识 一.windows的基础知识: 1.常用的DOS命令 盘符切换: D: 回车 进入目录: cd xxx 回退目录 返回到上一级: cd .. 返回到根目录: cd / ...
- Windows10公钥远程连接Linux服务器
目录 前言 一.环境准备 二.使用步骤 1.服务器安装并配置OpenSSH 2. 本地生成密钥 3. 服务器ssh添加密钥 三 总结 前言 使用公钥远程登陆Linux十分方便,无需输入密码,同时采用V ...
- [BZOJ2906]「颜色」
为什么C++ (11)-O2如此之快,直接优化1000ms... 强制在线,只能分块了. 本题应当预处理出每个块到后面几个块的每种数的平方与数量的前缀和. 由于空间限制,块长只能开到n的2/3次方, ...
- 寻找写代码感觉(三)之使用 Spring Boot 编写接口
一.前言 项目配置完之后,接着就是写接口了,那咱们就开始吧. 二.项目配置补充知识点 上篇文章写的是关于项目属性配置的一些知识,这里针对上次遗忘内容进行补充如下: 2.1.获取配置文件的值 在appl ...
- C#中的垃圾回收
- 06.SpringMVC之参数绑定
默认支持的参数类型一 HttpServletRequest .HttpServletResponse .HttpSession.java.security.Principal.Locale .Inpu ...
- MZY项目笔记:session歧路
from my typora MZY项目笔记:session歧路 文章目录 MZY项目笔记:session歧路 那该怎么办? 1. 手动加上cookie的header. 2.自己模拟一个Session ...
- spring 》Cglib赋值
第一个:字节码文件时带有ENHANCERBYCGLIB,FastClassByCGLIB组成的文件名 第二个:字节码文件时带有ENHANCERBYCGLIB 第三个:字节码文件时带有FastClass ...
- C# - 习题05_写出程序的输出结果o1.count
时间:2017-08-24 整理:byzqy 题目:写出下列程序的输出结果: //原题程序如下: class Class1 { private static int count = 0; static ...