Android实现记事本小功能

本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下

首先声明,本人是android的小白,主要是新人项目写了这个程序,思路可能不是很清晰,可优化的地方也有很多,望路过的大佬不吝赐教。
该记事本包含创建新条目,数据库增删改查,条目可编辑,滑动删除与拖拽排序,简单闹钟实现(还有个简陋背景音乐开关就不提了太简单),接下来逐一介绍一下。

build.gradle导入

apply plugin: 'kotlin-kapt'
'''
implementation 'com.google.android.material:material:1.0.0'
 implementation 'de.hdodenhof:circleimageview:3.0.1'
 implementation 'com.android.support.constraint:constraint-layout:1.1.3'
 implementation 'androidx.room:room-runtime:2.1.0'
 implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
 implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'
 implementation 'androidx.recyclerview:recyclerview:1.0.0'
 kapt "androidx.room:room-compiler:2.1.0"

没什么多说的。

Room数据库

room数据库相比于sqlite来说对新人确实友好很多,在没有SQL基础的前提下,增删改查等实现都很简单,只需创建一个实例,便可在线程中进行。具体代码为

①接口:

@Dao
interface NoteDao {

 @Update
 fun updateNote(newNote: Note)

 @Query("select * from Note")
 fun loadAllNotes(): List<Note>

 @Query("select * from Note where title > :title")
 fun loadNotesLongerThan(title:String) : List<Note>

 @Query("select * from Note where id == :id")
 fun loadById(id:Long) :Note

 @Delete
 fun deleteNote(note: Note)

 @Query("delete from Note where title == :title")
 fun deleteNoteByTitle(title: String): Int

 @Insert
 fun insertNote(note: Note)

}

②Appdatabase类(获取实例

@Database(version = 1, entities = [Note::class])
abstract class AppDatabase: RoomDatabase(){

 abstract fun noteDao() : NoteDao

 companion object{
 //访问实例
 private var instance : AppDatabase? = null

 @Synchronized//同步化
 fun getDatabase(context: Context):AppDatabase{
  instance?.let {
  return it
  }
  return Room.databaseBuilder(context.applicationContext,
  AppDatabase::class.java, "app_database")
  .build().apply {
   instance = this
  }
 }
 }
}

滑动删除和拖拽排序

class RecycleItemTouchHelper(private val helperCallback: ItemTouchHelperCallback) :
 ItemTouchHelper.Callback() {

 //设置滑动类型标记
 override fun getMovementFlags(
 recyclerView: RecyclerView,
 viewHolder: RecyclerView.ViewHolder
 ): Int {
 return makeMovementFlags(ItemTouchHelper.UP or ItemTouchHelper.DOWN,
  ItemTouchHelper.END or ItemTouchHelper.START )
 }

 override fun isLongPressDragEnabled(): Boolean {
 return true
 }

 //滑动
 override fun isItemViewSwipeEnabled(): Boolean {
 return true
 }

 //拖拽回调
 override fun onMove(
 recyclerView: RecyclerView,
 viewHolder: RecyclerView.ViewHolder,
 target: RecyclerView.ViewHolder
 ): Boolean {
 helperCallback.onMove(viewHolder.adapterPosition, target.adapterPosition)
 return true
 }

 //滑动
 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int): Unit {
 helperCallback.onItemDelete(viewHolder.adapterPosition)
 }

 //状态回调
 override fun onSelectedChanged(
 viewHolder: RecyclerView.ViewHolder?,
 actionState: Int
 ) {
 super.onSelectedChanged(viewHolder, actionState)
 }

 interface ItemTouchHelperCallback {
 fun onItemDelete(positon: Int)
 fun onMove(fromPosition: Int, toPosition: Int)
 }

}

NoteAdapter接口实现

拖拽排序和滑动删除后即更新一次,这种方法并不好,毕竟没有用到MVVM中的高级组件,包括观察者,Livedata,ViewModel察觉数据变化并提示更新。建议在这种方法的前提下可以考虑在从Activity离开后,再数据更新。
注:千万不要在**onPause()**中涉及数据更新和保存!!!

//拖拽排序
 override fun onMove(fromPosition: Int, toPosition: Int) {
 val noteDao = AppDatabase.getDatabase(context).noteDao()
  if (fromPosition < toPosition) {
  for (i in fromPosition until toPosition) {
   Collections.swap(noteList, i, i + 1)
   for (i in noteList){
   Log.d("title", i.title)
   }
   Log.d("tag2", fromPosition.toString()+"->"+toPosition)
  }
  } else {
  for (i in fromPosition downTo toPosition + 1) {
   Collections.swap(noteList, i, i - 1)
  }
  }
 //排序后的数据更新
 thread {
  var templist = noteDao.loadAllNotes().toMutableList()
  for (i in 0 until templist.size){
  templist[i].title = noteList[i].title
  templist[i].content = noteList[i].content
  noteDao.updateNote(templist[i])
  }
 }

 notifyItemMoved(fromPosition, toPosition)

 }

简易闹钟实现

broadcast类需要自己实现

class MyReceiver : BroadcastReceiver() {

 override fun onReceive(context: Context, intent: Intent) {
 // This method is called when the BroadcastReceiver is receiving an Intent broadcast.
 Toast.makeText(context,"You have a task to do!!!", Toast.LENGTH_LONG).show()
 }
}

这里只是发个广播通知,并没有提示声音,可以采取发到通知栏的方式,系统会有提示音。涉及到AlarmManager类
NoteActivity中的实现:

setBtn.setOnClickListener { view ->
  val c = Calendar.getInstance()
  //调整为中国时区,不然有8小时差比较麻烦
  val tz = TimeZone.getTimeZone("Asia/Shanghai")
  c.timeZone = tz
  //获取当前时间
  if (setHour.text.toString()!=""&&setMin.text.toString()!="") {
  c.set(Calendar.HOUR_OF_DAY, setHour.text.toString().toInt());//小时
  c.set(
   Calendar.MINUTE, setMin.text.toString().toInt()
  );//分钟
  c.set(Calendar.SECOND, 0);//秒
  }
  //计时发送通知
  val mIntent = Intent(this, MyReceiver::class.java)
  val mPendingIntent =
  PendingIntent.getBroadcast(this, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT)
  am = this
  .getSystemService(Context.ALARM_SERVICE) as AlarmManager
  if (setHour.text.toString()==""||setMin.text.toString()==""||
  setHour.text.toString().toInt() > 24 || setMin.text.toString().toInt() > 60) {
  Toast.makeText(this, "请输入正确的时间格式!", Toast.LENGTH_SHORT).show()
  } else {
  Log.d("fuck10", c.timeInMillis.toString())
  am!!.setExactAndAllowWhileIdle(
   AlarmManager.RTC_WAKEUP, c.timeInMillis,
   mPendingIntent
  )
  Toast.makeText(this, "设置成功", Toast.LENGTH_SHORT).show()
  }
 }

其它方面如点击recyclerView中的Item重新编辑时对原数据的展现,用到了setText(),这里注意不要跟kotlin中setText()和getText()搞混。

大概所有功能差不多就这些了,毕竟只是个记事本应用。
所有代码放在github上面了,如有需要,请自取

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android实现记事本app

    自己写的一个简单的记事本app,效果如下: 一.首先是第一个界面的编写,最上面是一个TextView,中间是一个Linearlayout中嵌套一个listview布局,最下面是一个button.下面附上第一个页面的简单布局xml文件. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" androi

  • Android中实现记事本动态添加行效果

    本文主要给大家介绍了关于Android实现记事本动态添加行的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 先看效果图: 这是昨天在群里面有人在问这个问题,在这里顺便记录一下,这个效果我们可以自定义EditText,实现起来也不难 看详细步骤: 第一:初始化Paint,这里肯定要用到画笔的 this.paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setColor(getResources().getCo

  • Android实现简易记事本

    本文实例为大家分享了Android实现简易记事本的具体代码,供大家参考,具体内容如下 此次做的Android简易记事本的存储方式使用了SQLite数据库,然后界面的实现比较简单,但是,具有增删改查的基本功能,这里可以看一下效果图,如下: 具体操作就是长按可以删除操作,点击可以进行修改,点击添加笔记按钮可以添加一个笔记. 首先我们需要三个界面样式一个是我们的进入程序时的第一个界面,然后第一个界面里面有一个ListView,这个ListView需要一个xml来描述里面的各个元素,这也是第二个.还有一

  • Android记事本项目开发

    写了一个Android记事本小程序,现在记录一下. 考虑到是记事本小程序,记录的内容只有文字,而且内容不会太长,所以选择使用SQLite数据库,数据存放在用户的手机上. 牵涉到数据库,那自然是一个实体.先设计实体数据表:DBHelper.java package com.ikok.notepad.DBUtil; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android

  • Android实现记事本功能

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 实现功能 1.文本数据的存储 2.图片数据存储 3.视频数据存储 4.自定义的Adapter 5.SQlite的创建 6.数据listview列表的显示 demo地址 记事本 界面布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.

  • Android利用Intent实现记事本功能(NotePad)

    本文实例为大家分享了Intent如何实现一个简单的记事本功能的演示过程,供大家参考,具体内容如下 1.运行截图 单击右上角[-]会弹出[添加]菜单项,长按某条记录会弹出快捷菜单[删除]项. 2.主要设计步骤 (1)添加引用 鼠标右击[引用]à[添加引用],在弹出的窗口中勾选"System.Data"和"System.Data.SQlite",如下图所示: 注意:不需要通过NuGet添加SQLite程序包,只需要按这种方式添加即可. (2)添加图片 到Android

  • Android+SQLite数据库实现的生词记事本功能实例

    本文实例讲述了Android+SQLite数据库实现的生词记事本功能.分享给大家供大家参考,具体如下: 主activity命名为 Dict: 代码如下: package example.com.myapplication; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase;

  • Android实现记事本功能(26)

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 MainActivity.java代码: package siso.smartnotef.activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.

  • Android实现记事本小功能

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 首先声明,本人是android的小白,主要是新人项目写了这个程序,思路可能不是很清晰,可优化的地方也有很多,望路过的大佬不吝赐教. 该记事本包含创建新条目,数据库增删改查,条目可编辑,滑动删除与拖拽排序,简单闹钟实现(还有个简陋背景音乐开关就不提了太简单),接下来逐一介绍一下. build.gradle导入 apply plugin: 'kotlin-kapt' ''' implementation 'com.

  • vue实现记事本小功能

    本文实例为大家分享了vue实现记事本小功能的具体代码,供大家参考,具体内容如下 直接上代码: <!DOCTYPE html> <html lang="en"> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script> <meta http-equiv="Content-Type" content=&q

  • Android中微信小程序支付倒计时功能

    看效果 由于web 经验弱爆- -  一开始我的思路是找事件,但是看了半天API 基本都是点击触摸,通过物理触发- - 我居然忽略了生命周期,生命周期+线程不就完全OK吗- 事实证明,线程还是王道啊,一开始就应该这么搞嘛- 度娘上面也看了很多都是用js写的,but,可能刚做没几天吧,我对js与微信小程序掌握还不够熟练 思路: onLoad:function(options)调用倒计时方法函数 定义线程进行数据动态现实 1. 日期转化成毫秒 2.定义线程动态显示 3.渲染倒计时 1.毫秒转成固定格

  • android实现录屏小功能

    本文实例为大家分享了android实现录屏小功能的具体代码,供大家参考,具体内容如下 思路 android实现录屏功能有两种方案,一种是直接使用android自带的MediaProjectionManager实现录屏功能,第二种是是只录语音,用户的操作通过某种方式进行记录保存,最后通过某种协议进行播放. 两种方案各有各的优缺点,前者实现方式简单,但无法只录制特定区域的画面,并且生成的视频文件一般都比较大.后者实现较为繁琐,音频录制android7.0之前没有暂停方法,只能生成多个文件,然后对音频

  • Android PicSelector图片选择器小功能

    本文实例为大家分享了Android实现图片选择器小功能的具体代码,供大家参考,具体内容如下 效果预览 实现 需要用到的库 compile 'com.squareup.picasso:picasso:2.3.2' compile 'com.android.support:appcompat-v7:26.1.0' 图片选择器大概思路: - 使用Content Provider获取存储器中的图片文件路径,以及所在文件夹,并存储到相应List中 - 使用RecyclerView制作网格视图,并用Pica

  • Android实现记住密码小功能

    本文实例为大家分享了Android实现记住密码小功能的具体代码,供大家参考,具体内容如下 以下有三个点 第一点是记住密码, 第二点是点击隐藏点击显示, 第三点是登录存储. XML布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=&q

  • Android 获取随机验证码功能示例

    验证码功能在各大网站都能用到,下面小编通过实例代码给大家分享Android 获取随机验证码功能,具体代码如下所示: package cn.hk.image; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; impo

  • Android仿外卖购物车功能

    先看看效果图: 知识点分析 效果图来看不复杂内容并没多少,值得介绍一下的知识点也就下面几个吧 - 列表标题悬停 - 左右列表滑动时联动 - 添加商品时的抛物线动画 - 底部弹出购物车清单 - 数据的同步 另外就是实现效果的时候可能会遇到的几个坑... 布局很简单直接进入代码 1:列表标题悬停 现在做项目列表什么的基本抛弃了ListView改用RecyclerView,上篇博客中的标题悬停也是使用了一个RecyclerView的开源项目sticky-headers-recyclerview,不过写

随机推荐