一、搭建记事本布局

效果图:


(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()方法
  • 套路:关联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记事本案例实战相关推荐

  1. 开发一个简单APP的流程及记事本案例(Android Studio)

    1.需求分析 (1)业务需求分析:分析潜在客户需要什么产品或服务 (2)架构分析:分析所做的产品或服务需要什么功能及实现方式并画出功能结构图,记事本案例如下 (3)数据库类设计分析:数据库设计是项目开 ...

  2. 《Android传感器开发与智能设备案例实战》——导读

    本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的目录,作者 朱元波,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 ...

  3. 《Android传感器开发与智能设备案例实战》——第2章,第2.4节安装ADT

    本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的第2章,第2.4节安装ADT,作者 朱元波,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  4. 《Android传感器开发与智能设备案例实战》——第1章,第1.2节Android的巨大优势...

    本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的第1章,第1.2节Android的巨大优势,作者 朱元波,更多章节内容可以访问云栖社区"异步社区&quo ...

  5. Android Study Jam 在线答疑第三期:Jetpack Compose 案例实战

    Android Study Jam 火热进行中 感兴趣的小伙伴都上车了吗? 为助力大家打好 Jetpack Compose 基础 我们的第三场 Office Hours 在线答疑 将于 今天上午 10 ...

  6. javaweb mooc在线系统案例实战-张晨光-专题视频课程

    javaweb mooc在线系统案例实战-170人已学习 课程介绍         讲解在线mooc系统的开发,从需求分析到类图设计,数据库设计,架构设计,代码编写等等. 课程收益     掌握jav ...

  7. 《图解CSS3:核心技术与案例实战》

    <图解CSS3:核心技术与案例实战> 基本信息 作者: 大漠 丛书名: Web开发技术丛书 出版社:机械工业出版社 ISBN:9787111469209 上架时间:2014-7-2 出版日 ...

  8. android开发入门与实践_我的新书《Android App开发入门与实战》已经出版

    前言 工作之余喜欢在CSDN平台上写一些技术文章,算下时间也有两三年了.写文章的目的一方面是自己对技术的总结,另一方面也是将平时遇到的问题和解决方案与大家分享,还有就是在这个平台上能和大家共同交流. ...

  9. PS案例实战,从基础到精通 淘宝美工/海报制作/人物精修-姜浩-专题视频课程

    PS案例实战,从基础到精通 淘宝美工/海报制作/人物精修-379人已学习 课程介绍         性价比高的ps课程 78节实例课程 35个PS案例 平均每节只需3毛钱 课程收益     PS基础, ...

最新文章

  1. 剑指offer:面试题09. 用两个栈实现队列
  2. 25元、264KB内存的微处理器,树莓派官方出品,自带快速休眠模式
  3. 07年末围炉盛宴 - 信息工作者应用与管理系列Webcast
  4. vant toast 指定挂载到指定位置_docker卷挂载技术
  5. [BAT] 执行xcopy命令后出现Invalid num of parameters错误的解决办法
  6. intellij idea强制更新索引
  7. java test30009_java求助
  8. wordpress导入数据错误MySQL返回:#1273 – Unknown collation:’utf8mb4_unicode_ci’
  9. 前端新手小白必看--最全静态网页模板网站
  10. .NET(c#) 移动APP开发平台之Smobiler开发
  11. NATS 分布式消息队列系统
  12. 基于AT89S52单片机的GPS液晶显示定位系统
  13. 手机dpi修改工具_手机dpi修改器
  14. GoldWave中文版如何将视频批量转换为音频?
  15. 电脑快捷方式图标变白解决方案
  16. 现代软件工程 课件 软件工程师能力自我评价表
  17. Android技术分享| 实现视频连麦直播
  18. @zxing/library实现平板手机扫码功能(二维码+条形码)
  19. Poseidon Foundation:利物浦努力至2020年底成为首个“气候友好型”城市
  20. 【APP渗透测试】 Android APP渗透测试技术实施以及工具使用(客户端服务端)

热门文章

  1. BIM+区块链,让城市建设更智慧
  2. 1-CO-COPC-计划成本
  3. 罗斯蒙特压力变送器3051DP1A62A1AB4M5K8HR5
  4. python实现火车票查询_Python脚本实现12306火车票查询系统
  5. gadget之usb_gadget
  6. MSF复现MS17-010漏洞(永恒之蓝)
  7. 黑马教程深入学习C++(持续更新中)
  8. 【Demo】微信上墙
  9. 关于保护继电器触点(灭弧)
  10. 入栈和出栈操作的合法序列判定