Android的Notepad记事本案例实战
一、搭建记事本布局
效果图:
(activity_notepad.xml)
1.去掉标题栏:在AndroidManifest.xml中的theme改成NoActionBar。
2.记事本主页布局:
<!--1.搭建记事本界面布局-->
<!--(1)TextView:显示界面标题-->
<!--(2)ListView:显示记录列表-->
<!--(3)ImageView:图片作添加按钮-->
3.细节解释:
(1)相对布局中:
背景色:#fefefe(网页安全色:偏白黄色)
android:background="#fefefe"
(2)ListView:
android:cacheColorHint="#00000000" <--避免滚动时,重绘View时出现其他颜色-->
android:divider="#E4E4E4" <--分割线:"#E4E4E4"颜色为极亮度的灰色阴影-->
android:dividerHeight="1dp" <--设置分割线高度-->
android:fadingEdge="none" <--滚动效果:取消滚动时的阴影层次-->
android:listSelector="#00000000" <--避免默认会显示选中的item为橙黄底色-->
android:scrollbars="none" <--滚动条:隐藏-->
android:layout_below="@+id/note_name" <--在~位置之下:在@+id/note_name控件之下-->
3.ImageView
android:layout_marginBottom="30dp" <--距离底部:30dp-->
android:layout_alignParentBottom="true" <--悬浮,并一直处于屏幕底端-->
android:layout_centerHorizontal="true" <--位置:居中-->
二、搭建记事本主界面的Item布局
(notepad_item_layout.xml)
1.Item布局
<!--2.搭建记事本主界面里的Item布局-->
<!--(1)TextView:显示内容-->
<!--(2)TextView:显示时间-->
2.细节解释:
android:maxLines="2" <--最大显示行数:2行(无论有多少行,只显示2行)-->
android:ellipsize="end" <--压缩显示:若内容过多,省略号在结尾-->
android:lineSpacingExtra="3dp" <--行间距-->
android:paddingTop="10dp" <--该控件内部度内容距离该控件上边缘的边距-->
三、封装记录信息实体类
(NotepadBean.java)
1.getset方法:
Id(记录的id)、notepadCountent(记录的内容)、noteoadTime(保存记录的时间)
四、编写记事本界面列表适配器
(NotepadAdapter.java)
1.继承BaseAdapter
(1)XML布局对象:LayoutInflater layoutInflater
(2)实体信息对象:List list
2.构造方法
3.四个重写
(1)获取Item总数:getCount()
(2)对应Item对象:getItem(int position)
(3)Item对象的Id:getItemId(int position)
(4)对应的Item视图:getView(int position, View convertView, ViewGroup parent)
在getView中:声明一个ViewHolder viewHolder类对象
- 在getView外:实现ViewHolder类:声明实际item布局空间
- 在实现ViewHolder类中:实现findViewById()方法
- 在getView外:实现ViewHolder类:声明实际item布局空间
套路:关联viewholder与convertView
if (convertView == null) {convertView = layoutInflater.inflate(R.layout.notepad_item_layout, null);//实例化一个对象(布局加载器)viewHolder = new ViewHolder(convertView);//实例化类对象convertView.setTag(viewHolder);//关联viewholder与convertView} else {viewHolder = (ViewHolder) convertView.getTag();}
获取实体信息类
获取相应的值set(get)
4.把Item的布局放为一个类(对应(4)的getView外)
5.实现数据跟控件的一一对应(在View中找到控件)findViewById(对应(4)的在实现ViewHolder类外)
五、创建数据库
(DBUtils.java、SQLiteHelper,java)
1.创建DBUtils类
(1)定义数据库的名称、表名、数据库版本、数据库表中的列名以及获取当前日期等消息
2.创建SQLiteHelper类
(1)创建数据库
(2)重写创建表、修改方法
(3)增删改查方法
六、实现记事本界面的显示功能
(NotepadActivity.java)
1.继承Activity
2.声明控件、数据库、实体信息、适配器
3.重写监听点击按钮:跳转
重写onCreate()方法
- 加载xml布局文件
setContentView(R.layout.activity_notepad);
- 与xml控件联系
listView = (ListView) findViewById(R.id.listview); add = (ImageView) findViewById(R.id.add);
4.点击添加的触发器:匿名内部类实现事件监听(页面跳转)
5.初始化数据:数据库
6.点击列表的触发器:匿名内部类实现事件监听(实现查看记录的功能)
7.关闭添加、修改页面返回主页面时的显示:
七、搭建添加记录界面和修改记录界面的布局
(activity_record.xml)
八、实现添加、修改记录界面的功能
(RecordActivity.java)
1.标题的添加与修改,通过判断是否有id,实现标题是“添加”、“修改”。
2.实现“保存”、“清空”、“返回”按钮
九、XML整体框架
1.主界面
2.添加、修改界面
十、JAVA整体框架
1.NotepadBean(记录的实体信息)
(1)定义记录的id、内容、保存记录的时间
(2)三个get set方法
2.NotepadAdapter(自定义适配器)
(1)继承BaseAdapter
(2)定义XML布局对象(item_XML布局)、实体信息对象(NotepadBean.java)
private LayoutInflater layoutInflater;
private List<NotepadBean> list;
(3)构造方法
(4)重写item数量、位置、Id、View的get方法
- 实现getView()方法:套路+获取实体信息实例+获取两个控件实例
(5)定义Item布局类(把item_XML的两个TextView放进去)
- 实现findViewById()
3.DBUtils(数据库的基本定义)
(1)定义数据库名称、表名、版本
public static final String DATABASE_NAME = "Notepad";//数据库名
public static final String DATABASE_TABLE = "Note"; //表名
public static final int DATABASE_VERION = 1; //数据库版本
(2)定义数据库的列名:id、内容、时间
public static final String NOTEPAD_ID = "id";//记录的id
public static final String NOTEPAD_CONTENT = "content";//记录的内容
public static final String NOTEPAD_TIME = "notetime";//保存记录的时间
(3)获取系统时间的方法
public static final String getTime(){SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//日期格式化Date date = new Date(System.currentTimeMillis());//获取当前时间return simpleDateFormat.format(date);}
4.SQLiteHelper(创建数据库)
(1)定义数据库
private SQLiteDatabase sqLiteDatabase;
(2)创建数据库(构造方法)
(3)重写创建表(重写onCreate()方法)
(4)重写更新表(重写onUpgrade)
(5)增删改查()
//添加数据public boolean insertData(String userContent, String userTime) {ContentValues contentValues = new ContentValues();contentValues.put(DBUtils.NOTEPAD_CONTENT, userContent);contentValues.put(DBUtils.NOTEPAD_TIME, userTime);returnsqLiteDatabase.insert(DBUtils.DATABASE_TABLE, null, contentValues) > 0;}//删除数据public boolean deleteData(String id) {String sql = DBUtils.NOTEPAD_ID + "=?";String[] contentValuesArray = new String[]{String.valueOf(id)};returnsqLiteDatabase.delete(DBUtils.DATABASE_TABLE, sql, contentValuesArray) > 0;}//修改数据public boolean updateData(String id, String content, String userYear) {ContentValues contentValues = new ContentValues();contentValues.put(DBUtils.NOTEPAD_CONTENT, content);contentValues.put(DBUtils.NOTEPAD_TIME, userYear);String sql = DBUtils.NOTEPAD_ID + "=?";String[] strings = new String[]{id};returnsqLiteDatabase.update(DBUtils.DATABASE_TABLE, contentValues, sql, strings) > 0;}//查询数据public List<NotepadBean> query() {List<NotepadBean> list = new ArrayList<NotepadBean>();Cursor cursor = sqLiteDatabase.query(DBUtils.DATABASE_TABLE, null, null, null,null, null, DBUtils.NOTEPAD_ID + " desc");if (cursor != null) {while (cursor.moveToNext()) {NotepadBean noteInfo = new NotepadBean();String id = String.valueOf(cursor.getInt(cursor.getColumnIndex(DBUtils.NOTEPAD_ID)));String content = cursor.getString(cursor.getColumnIndex(DBUtils.NOTEPAD_CONTENT));String time = cursor.getString(cursor.getColumnIndex(DBUtils.NOTEPAD_TIME));noteInfo.setId(id);noteInfo.setNotepadContent(content);noteInfo.setNotepadTime(time);list.add(noteInfo);}cursor.close();}return list;}
5.RecordActivity(记录界面)
(1)声明第二界面控件、数据库
(2)重写oncreate()方法
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}
加载xml布局文件:setContentView(R.layout.~)
findViewById
点击事件:.setOnClickListener(this)
initData();
(3)初始化数据:数据库(initData();)
创建数据库:mSQLiteHelper = new SQLiteHelper(this);
获取Intent对象:Intent intent = getIntent();
添加、修改标题的更改setText()
判断进入记录界面时是添加还是修改
(4)重写监听:“保存”、“清空”、“返回”按钮实现点击事件
@Overridepublic void onClick(View v) {}
用switch case 判断点击哪个键触发什么操作
(5)显示操作信息
public void showToast(String message){Toast.makeText(RecordActivity.this,message,Toast.LENGTH_SHORT).show();}
6.NotepadActivity(主界面)
(1)继承Activity
(2)声明控件、数据库、实体信息、适配器
(3)重写oncreate()方法
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}
加载xml布局文件:setContentView(R.layout.~)
findViewById
点击事件(匿名内部类): .setOnClickListener((v)->{Intent intent = new Intent(NotepadActivity.this,RecordActivity.class);startActivityForResult(intent, 1);//跳转到添加记录界面});
initData();
(3)初始化数据:数据库(initData()
Android的Notepad记事本案例实战相关推荐
- 开发一个简单APP的流程及记事本案例(Android Studio)
1.需求分析 (1)业务需求分析:分析潜在客户需要什么产品或服务 (2)架构分析:分析所做的产品或服务需要什么功能及实现方式并画出功能结构图,记事本案例如下 (3)数据库类设计分析:数据库设计是项目开 ...
- 《Android传感器开发与智能设备案例实战》——导读
本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的目录,作者 朱元波,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 ...
- 《Android传感器开发与智能设备案例实战》——第2章,第2.4节安装ADT
本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的第2章,第2.4节安装ADT,作者 朱元波,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- 《Android传感器开发与智能设备案例实战》——第1章,第1.2节Android的巨大优势...
本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的第1章,第1.2节Android的巨大优势,作者 朱元波,更多章节内容可以访问云栖社区"异步社区&quo ...
- Android Study Jam 在线答疑第三期:Jetpack Compose 案例实战
Android Study Jam 火热进行中 感兴趣的小伙伴都上车了吗? 为助力大家打好 Jetpack Compose 基础 我们的第三场 Office Hours 在线答疑 将于 今天上午 10 ...
- javaweb mooc在线系统案例实战-张晨光-专题视频课程
javaweb mooc在线系统案例实战-170人已学习 课程介绍 讲解在线mooc系统的开发,从需求分析到类图设计,数据库设计,架构设计,代码编写等等. 课程收益 掌握jav ...
- 《图解CSS3:核心技术与案例实战》
<图解CSS3:核心技术与案例实战> 基本信息 作者: 大漠 丛书名: Web开发技术丛书 出版社:机械工业出版社 ISBN:9787111469209 上架时间:2014-7-2 出版日 ...
- android开发入门与实践_我的新书《Android App开发入门与实战》已经出版
前言 工作之余喜欢在CSDN平台上写一些技术文章,算下时间也有两三年了.写文章的目的一方面是自己对技术的总结,另一方面也是将平时遇到的问题和解决方案与大家分享,还有就是在这个平台上能和大家共同交流. ...
- PS案例实战,从基础到精通 淘宝美工/海报制作/人物精修-姜浩-专题视频课程
PS案例实战,从基础到精通 淘宝美工/海报制作/人物精修-379人已学习 课程介绍 性价比高的ps课程 78节实例课程 35个PS案例 平均每节只需3毛钱 课程收益 PS基础, ...
最新文章
- 剑指offer:面试题09. 用两个栈实现队列
- 25元、264KB内存的微处理器,树莓派官方出品,自带快速休眠模式
- 07年末围炉盛宴 - 信息工作者应用与管理系列Webcast
- vant toast 指定挂载到指定位置_docker卷挂载技术
- [BAT] 执行xcopy命令后出现Invalid num of parameters错误的解决办法
- intellij idea强制更新索引
- java test30009_java求助
- wordpress导入数据错误MySQL返回:#1273 – Unknown collation:’utf8mb4_unicode_ci’
- 前端新手小白必看--最全静态网页模板网站
- .NET(c#) 移动APP开发平台之Smobiler开发
- NATS 分布式消息队列系统
- 基于AT89S52单片机的GPS液晶显示定位系统
- 手机dpi修改工具_手机dpi修改器
- GoldWave中文版如何将视频批量转换为音频?
- 电脑快捷方式图标变白解决方案
- 现代软件工程 课件 软件工程师能力自我评价表
- Android技术分享| 实现视频连麦直播
- @zxing/library实现平板手机扫码功能(二维码+条形码)
- Poseidon Foundation:利物浦努力至2020年底成为首个“气候友好型”城市
- 【APP渗透测试】 Android APP渗透测试技术实施以及工具使用(客户端服务端)