一个简易的备忘录

实现效果如下

  • 主界面
  • 编辑界面
  • 显示界面
  • 删除界面

具体编程思路如下

由于想要仿照做项目那样,所以运用了mvc的模式。
目录结构如下

具体代码如下

MainActivity页面代码

package com.example.diary.controller.activity;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;import com.example.diary.R;
import com.example.diary.controller.adaptet.DiaryListAdapter;
import com.example.diary.model.Model;
import com.example.diary.model.bean.Diaryinfo;import java.util.List;public class MainActivity extends AppCompatActivity {private ListView lv_main_diary;private ImageView iv_main_write;private DiaryListAdapter diaryListAdapter;private LocalBroadcastManager mLBM;private BroadcastReceiver DiaryReceiver=new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {refresh();}};private String title;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();initListener();refresh();}//刷新方法private void refresh() {List<Diaryinfo> diaryinfos = Model.getInstance().getDiaryTableDao().getDiaryByTitle();diaryListAdapter.refresh(diaryinfos);}private void initListener() {iv_main_write.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(MainActivity.this, DiaryActivity.class);startActivity(intent);}});}private void initData() {diaryListAdapter = new DiaryListAdapter(MainActivity.this);lv_main_diary.setAdapter(diaryListAdapter);//listview的item点击事件lv_main_diary.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {Diaryinfo diaryinfo = (Diaryinfo) adapterView.getItemAtPosition(position);Intent intent = new Intent(MainActivity.this,DiaryDetailActivity.class);intent.putExtra("title",diaryinfo.getTitle());intent.putExtra("content",diaryinfo.getContent());startActivity(intent);}});//接收到广播mLBM=LocalBroadcastManager.getInstance(MainActivity.this);mLBM.registerReceiver(DiaryReceiver,new IntentFilter("diary_change"));//绑定listview和contextmenuregisterForContextMenu(lv_main_diary);}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);int position= ((AdapterView.AdapterContextMenuInfo)menuInfo).position;Diaryinfo diaryinfo = (Diaryinfo) lv_main_diary.getItemAtPosition(position);title = diaryinfo.getTitle();MainActivity.this.getMenuInflater().inflate(R.menu.delete,menu);}@Overridepublic boolean onContextItemSelected(@NonNull MenuItem item) {if(item.getItemId() == R.id.diary_delete){Model.getInstance().getDiaryTableDao().deleteDiary(title);refresh();return true;}return super.onContextItemSelected(item);}private void initView() {iv_main_write = findViewById(R.id.iv_main_write);lv_main_diary = findViewById(R.id.lv_main_diary);}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(DiaryReceiver);}
}

DiaryActivity页面代码

package com.example.diary.controller.activity;import androidx.appcompat.app.AppCompatActivity;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;import android.content.BroadcastReceiver;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;import com.example.diary.R;
import com.example.diary.model.Model;
import com.example.diary.model.bean.Diaryinfo;import java.text.SimpleDateFormat;
import java.util.Date;public class DiaryActivity extends AppCompatActivity {private TextView tvDiaryCancel;private TextView tvDiarySave;private EditText etDiaryTitle;private EditText etDiaryContent;private LocalBroadcastManager mLBM;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_diary);mLBM=LocalBroadcastManager.getInstance(DiaryActivity.this);initView();initListener();}private void initListener() {tvDiaryCancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {cancel();}});tvDiarySave.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {save();}});}//保存方法实现private void save() {String title = etDiaryTitle.getText().toString();String content = etDiaryContent.getText().toString();//设置时间SimpleDateFormat simpleDateFormat=new SimpleDateFormat("MM-dd HH:mm");Date time = new Date(System.currentTimeMillis());String date=simpleDateFormat.format(time);Diaryinfo diaryinfo=new Diaryinfo();diaryinfo.setTitle(title);diaryinfo.setContent(content);diaryinfo.setDate(date);Model.getInstance().getDiaryTableDao().saveDiary(diaryinfo);mLBM.sendBroadcast(new Intent("diary_change"));finish();}//取消方法实现private void cancel() {Intent intent = new Intent(DiaryActivity.this, MainActivity.class);startActivity(intent);}private void initView() {tvDiaryCancel = (TextView)findViewById( R.id.tv_diary_cancel );tvDiarySave = (TextView)findViewById( R.id.tv_diary_save );etDiaryTitle = (EditText)findViewById( R.id.et_diary_title );etDiaryContent = (EditText)findViewById( R.id.et_diary_content );}
}

DiaryDetailActivity页面代码

package com.example.diary.controller.activity;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;import com.example.diary.R;public class DiaryDetailActivity extends AppCompatActivity {private TextView tv_diarydetail_content;private TextView tv_diarydetail_title;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_diary_detail);initView();initData();}private void initData() {Intent intent = getIntent();tv_diarydetail_title.setText(intent.getStringExtra("title"));tv_diarydetail_content.setText(intent.getStringExtra("content"));}private void initView() {tv_diarydetail_title = findViewById(R.id.tv_diarydetail_title);tv_diarydetail_content = findViewById(R.id.tv_diarydetail_content);}
}

Diaryinfo页面代码

package com.example.diary.model.bean;public class Diaryinfo {private String id;private String title;private String content;private String date;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}
}

DiaryTableDao页面代码

package com.example.diary.model.dao;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;import com.example.diary.model.bean.Diaryinfo;
import com.example.diary.model.db.DiaryDB;import java.util.ArrayList;
import java.util.List;public class DiaryTableDao {private final DiaryDB mHelper;public DiaryTableDao(Context context){mHelper=new DiaryDB(context);}//添加日记public void saveDiary(Diaryinfo diaryinfo){SQLiteDatabase db=mHelper.getReadableDatabase();ContentValues values=new ContentValues();values.put(DiaryTable.COL_ID,diaryinfo.getId());values.put(DiaryTable.COL_TITLE,diaryinfo.getTitle());values.put(DiaryTable.COL_CONTENT,diaryinfo.getContent());values.put(DiaryTable.COL_DATE,diaryinfo.getDate());db.replace(DiaryTable.TAB_NAME,null,values);}//获取日记public List<Diaryinfo> getDiaryByTitle(){SQLiteDatabase db = mHelper.getReadableDatabase();String sql="select * from " + DiaryTable.TAB_NAME ;Cursor cursor = db.rawQuery(sql,null);List<Diaryinfo> diaryinfos=new ArrayList<>();while (cursor.moveToNext()){Diaryinfo diaryinfo=new Diaryinfo();diaryinfo.setId(cursor.getString(cursor.getColumnIndex(DiaryTable.COL_ID)));diaryinfo.setTitle(cursor.getString(cursor.getColumnIndex(DiaryTable.COL_TITLE)));diaryinfo.setContent(cursor.getString(cursor.getColumnIndex(DiaryTable.COL_CONTENT)));diaryinfo.setDate(cursor.getString(cursor.getColumnIndex(DiaryTable.COL_DATE)));diaryinfos.add(diaryinfo);}return diaryinfos;}//删除日记public void deleteDiary(String title){if (title==null){return;}SQLiteDatabase db = mHelper.getReadableDatabase();db.delete(DiaryTable.TAB_NAME,DiaryTable.COL_TITLE+"=?",new String[]{title});}}

Model页面代码

package com.example.diary.model;import android.content.Context;import com.example.diary.model.dao.DiaryTableDao;//数据模型全局类
public class Model {private Context mContext;private static Model model=new Model();private DiaryTableDao diaryTableDao;private Model(){}public static Model getInstance(){return model;}public void init(Context context){mContext=context;diaryTableDao=new DiaryTableDao(mContext);}public DiaryTableDao getDiaryTableDao(){return diaryTableDao;}}

IMApplication页面代码

package com.example.diary;import android.app.Application;
import android.content.Context;import com.example.diary.model.Model;public class IMApplication extends Application {private static Context mContext;@Overridepublic void onCreate() {super.onCreate();Model.getInstance().init(this);//初始化全局上下文对象mContext=this;}
}

结后语
这就是简易备忘录的设计,核心代码也已经贴出来了,剩下的一些细节,我后面也会把源码放出来的,实现的方法有的可能也有不妥,还望有大佬可以指出。
源码地址:https://download.csdn.net/download/TI_ZJW/12305790

Android的简易备忘录相关推荐

  1. Android开发————简易备忘录(三)

    实验内容 1. android 开发环境搭建, 开发工具可以是eclipse+adt 或android studio. 2. 按照实验课要求制作对应的app小程序,实现按钮添加备忘,并且包含日期时间. ...

  2. 最好用的Windows 10终端——FluentTerminal

    Windows 10自带的终端太丑 Windows 10的终端界面设计的如此丑,无论是cmd,powershell 还是wsl.默认的颜色和字体都非常难看.虽然进行一些颜色的设置可以改善视觉效果,但是 ...

  3. Android小项目——简易备忘录

    Android小项目--简易备忘录的实现 简易备忘录主要实现功能类似手机默认备忘录,可以对备忘录目录进行增添和删除.在编辑页面,可以显示当前时间,编辑备忘录标题,备忘录内容,设置时间提醒,插入图片等 ...

  4. Android备忘录定时功能,这个极简备忘录,让你 2 秒记录一个提醒事项 - Recall #Android...

    原标题:这个极简备忘录,让你 2 秒记录一个提醒事项 - Recall #Android 作者:梁晋豪 对于随时随地的轻度记录,我们的习惯往往是使用系统便签,或是印象笔记等笔记软件. 而在这几年里,备 ...

  5. Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程

    首先下载并安装安卓SDK和java的JDK 安卓sdk下载: http://www.android-studio.org/ 也可以在这下载: 链接:http://pan.baidu.com/s/1bp ...

  6. Android 的NDK的Makefile编写

    Android.mk 是google根据Linux GNU Makefile精简编译脚本.具体来说:这就是GNU Makefile的一小部分. 举一个简单例子: LOCAL_PATH := $(cal ...

  7. Android Animation (安卓动画)概念简介

    Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...

  8. 基于Android和SpringBoot的购物App

    (Shopping)购物应用商城 本软件使用Android和SpringBoot.JavaWeb技术实现:并结合百度LBS平台的SDK.支付宝App支付客户端SDK.MobTech的ShareSDK: ...

  9. Android数据持久化:SharePreference

    SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...

最新文章

  1. python勾股定理_Python学习第128课——在Python中实现醉汉随机游走
  2. AndroidApplication Fundamentals(Android应用基础)
  3. 序列化类型为XX的对象时检测到循环引用
  4. Spring Boot与Activiti集成实战
  5. 假期读书|《步履不停》读后感
  6. js 值类型和引用类型
  7. Python 2.7.X安装dpkt, sendpkt, pycap
  8. 摄像头训练的吃豆人,我还是没活几集 | TensorFlow.js
  9. feedback vertex set problem (FVS) 反馈顶点集问题 是什么
  10. LoRa协议学习工具
  11. cat6 万兆_超六类屏蔽网线CAT6AF/FTP10G万兆过测试工程网线益朗通信科技冀州
  12. Face Recognition 人脸识别该如何测试
  13. LeetCode每日一题(22年1月27日-2月5日)
  14. centos7 polkitd[661]: Unregistered Authentication Agent for unix-process:1781:115097 (system bus nam
  15. 2cm有多长实物图_一厘米有多长,求图片
  16. 指尖轻舞桌面:Slide On Desk - 主题风格制作指南
  17. 洛谷 P2142 高精度减法
  18. 计算机网络实验四协议分析心得,计算机网络学习心得体会范文
  19. 赛季更新服务器维修,12月30日第一赛季结束 夺神之权服务器停机维护公告
  20. Linux服务器管理记录

热门文章

  1. python自动接收钉钉信息_用Python实现阿里钉钉机器人读取数据库内容自动发群通知...
  2. AI(006) - 笔记 - 回顾线性回归(Linear Regression)
  3. 水桶实验:牛顿与马赫
  4. 开店必备的5款超实用零售管理软件,第1个新手也能轻松使用!
  5. 第二次网页前端培训笔记
  6. 【动态规划】插入乘号问题
  7. hi nova 9z参数 hi nova 9z评测
  8. 捕获鼠标和键盘的原始数据
  9. 王国维说古今之成大事业大学问者不可不历三种之境界
  10. 你笑起来真好看用计算机打出来的,你笑起来真好看是什么歌