一个简易的备忘录
实现效果如下
- 主界面
- 编辑界面
- 显示界面
- 删除界面
具体编程思路如下
由于想要仿照做项目那样,所以运用了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() {
@Override
public void onReceive(Context context, Intent intent) {
refresh();
}
};
private String title;
@Override
protected 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() {
@Override
public 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() {
@Override
public 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和contextmenu
registerForContextMenu(lv_main_diary);
}
@Override
public 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);
}
@Override
public 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);
}
@Override
protected 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;
@Override
protected 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() {
@Override
public void onClick(View view) {
cancel();
}
});
tvDiarySave.setOnClickListener(new View.OnClickListener() {
@Override
public 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;
@Override
protected 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;
@Override
public void onCreate() {
super.onCreate();
Model.getInstance().init(this);
//初始化全局上下文对象
mContext=this;
}
}
结后语
这就是简易备忘录的设计,核心代码也已经贴出来了,剩下的一些细节,我后面也会把源码放出来的,实现的方法有的可能也有不妥,还望有大佬可以指出。
源码地址:https://download.csdn.net/download/TI_ZJW/12305790