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() {
        @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

  • 7
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值