Android的简易备忘录
一个简易的备忘录
实现效果如下
- 主界面
- 编辑界面
- 显示界面
- 删除界面
具体编程思路如下
由于想要仿照做项目那样,所以运用了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的简易备忘录相关推荐
- Android开发————简易备忘录(三)
实验内容 1. android 开发环境搭建, 开发工具可以是eclipse+adt 或android studio. 2. 按照实验课要求制作对应的app小程序,实现按钮添加备忘,并且包含日期时间. ...
- 最好用的Windows 10终端——FluentTerminal
Windows 10自带的终端太丑 Windows 10的终端界面设计的如此丑,无论是cmd,powershell 还是wsl.默认的颜色和字体都非常难看.虽然进行一些颜色的设置可以改善视觉效果,但是 ...
- Android小项目——简易备忘录
Android小项目--简易备忘录的实现 简易备忘录主要实现功能类似手机默认备忘录,可以对备忘录目录进行增添和删除.在编辑页面,可以显示当前时间,编辑备忘录标题,备忘录内容,设置时间提醒,插入图片等 ...
- Android备忘录定时功能,这个极简备忘录,让你 2 秒记录一个提醒事项 - Recall #Android...
原标题:这个极简备忘录,让你 2 秒记录一个提醒事项 - Recall #Android 作者:梁晋豪 对于随时随地的轻度记录,我们的习惯往往是使用系统便签,或是印象笔记等笔记软件. 而在这几年里,备 ...
- Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程
首先下载并安装安卓SDK和java的JDK 安卓sdk下载: http://www.android-studio.org/ 也可以在这下载: 链接:http://pan.baidu.com/s/1bp ...
- Android 的NDK的Makefile编写
Android.mk 是google根据Linux GNU Makefile精简编译脚本.具体来说:这就是GNU Makefile的一小部分. 举一个简单例子: LOCAL_PATH := $(cal ...
- Android Animation (安卓动画)概念简介
Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...
- 基于Android和SpringBoot的购物App
(Shopping)购物应用商城 本软件使用Android和SpringBoot.JavaWeb技术实现:并结合百度LBS平台的SDK.支付宝App支付客户端SDK.MobTech的ShareSDK: ...
- Android数据持久化:SharePreference
SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...
最新文章
- python勾股定理_Python学习第128课——在Python中实现醉汉随机游走
- AndroidApplication Fundamentals(Android应用基础)
- 序列化类型为XX的对象时检测到循环引用
- Spring Boot与Activiti集成实战
- 假期读书|《步履不停》读后感
- js 值类型和引用类型
- Python 2.7.X安装dpkt, sendpkt, pycap
- 摄像头训练的吃豆人,我还是没活几集 | TensorFlow.js
- feedback vertex set problem (FVS) 反馈顶点集问题 是什么
- LoRa协议学习工具
- cat6 万兆_超六类屏蔽网线CAT6AF/FTP10G万兆过测试工程网线益朗通信科技冀州
- Face Recognition 人脸识别该如何测试
- LeetCode每日一题(22年1月27日-2月5日)
- centos7 polkitd[661]: Unregistered Authentication Agent for unix-process:1781:115097 (system bus nam
- 2cm有多长实物图_一厘米有多长,求图片
- 指尖轻舞桌面:Slide On Desk - 主题风格制作指南
- 洛谷 P2142 高精度减法
- 计算机网络实验四协议分析心得,计算机网络学习心得体会范文
- 赛季更新服务器维修,12月30日第一赛季结束 夺神之权服务器停机维护公告
- Linux服务器管理记录