安卓学习记录(四)——体温表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”:如果第一次执行时间被延迟了,随后的执行时间按照上一次实际执行完成的时间点进行计算 演示 ...
随机推荐
- Nginx配置websocket的安全协议wss
//nginx配置wss访问方式 map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream webso ...
- docker-03
Docker构建私有registry(仓库) #1 启动registry [root@docker ~]# docker run -d -p 5000:5000 --restart=always -- ...
- MySQL索引篇之索引存储模型
本文重点介绍下索引的存储模型 二分查找 给定一个1~100的自然数,给你5次机会,你能猜中这个数字吗? 你会从多少开始猜? 为什么一定是50呢?这个就是二分查找的一种思想,也叫折半查找,每 ...
- 高性能 C++ HTTP 客户端原理与实现
一.什么是Http Client Http协议,是全互联网共同的语言,而Http Client,可以说是我们需要从互联网世界获取数据的最基本方法,它本质上是一个URL到一个网页的转换过程.而有了基本的 ...
- 关于c#:如何在不同的命名空间中处理相同的类名?
How to handle same class name in different namespaces? 我正在尝试创建一个通用的库结构. 我通过为我想要的每个公共库创建单独的项目来做到这一点 我 ...
- C#多线程---I/O线程实现异步请求
一.场景 利用I/O线程来模拟浏览器对服务器请求的异步操作. 二.例子 1 using System; 2 using System.Collections.Generic; 3 using Syst ...
- Map 综述(四):彻头彻尾理解 HashTable
摘要: Hashtable与HashMap都是Map族中较为常用的实现,也都是Java Collection Framework 的重要成员,它们的本质都是 链表数组.本文深入JDK源码并从定义.构造 ...
- DeltaLake数据湖解决方案
Delta Lake 是DataBricks公司推出的一种数据湖解决方案,Delta为该方案的核心组件.围绕数据流走向(数据入湖从流入数据湖.数据组织管理.数据查询到流出数据湖)推出了一系列功能特性, ...
- springcloud<zuul过滤器简单配置与跨域设置>
package com.wangbiao.config; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.Req ...
- 【WPF】 OxyPlot图表控件学习
最近在学习OxyPlot图表控件,一些基本的学习心得,在这里记录一下,方便以后进行查找. 一.引用 OxyPlot控件可以直接在VS的 " Nuget " 里面下载 选择: ...