Android 备忘录 Android 备忘录的实现流程详解
猪小温 人气:0想了解Android 备忘录的实现流程详解的相关内容吗,猪小温在本文为您仔细讲解Android 备忘录的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Android,备忘录,Android,记事本,下面大家一起来学习吧。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、首先创建保存数据的表
Notedatabase,java
package com.example.biji_1; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class NoteDatabase extends SQLiteOpenHelper { public static final String TABLE_NAME ="notes"; public static final String CONTENT ="content"; public static final String ID ="_id"; public static final String TIME ="time"; public static final String MODE ="mode"; public NoteDatabase(Context context){ super(context,"notes",null,1); } @Override public void onCreate(SQLiteDatabase db){ db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + CONTENT + " TEXT NOT NULL, " + TIME + " TEXT NOT NULL, " + MODE + " INTEGER DEFAULT 1)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion){ } }
二、主界面
MainAcitivity.java
public class MainActivity extends BaseActivity implements AdapterView.OnItemClickListener { //test gittt private NoteDatabase dbHelper; private Context context = this; final String TAG = "tag"; FloatingActionButton btn; private ListView lv; private NoteAdapter adapter; private List<Note> noteList = new ArrayList<Note>(); private Toolbar myToolbar; //弹出菜单 private PopupWindow popupWindow; private PopupWindow popupCover; private ViewGroup customView; private ViewGroup coverView; private LayoutInflater layoutInflater; private RelativeLayout main; private WindowManager wm; private DisplayMetrics metrics; private TextView setting_text; private ImageView setting_image; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initPrefs(); btn = (FloatingActionButton) findViewById(R.id.fab); lv = findViewById(R.id.lv); myToolbar = findViewById(R.id.myToolbar); adapter = new NoteAdapter(getApplicationContext(), noteList); refreshListView(); lv.setAdapter(adapter); setSupportActionBar(myToolbar); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); //设置toolbar取代actionbar initPopUpView(); myToolbar.setNavigationIcon(R.drawable.ic_baseline_menu_24); myToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "onClick: shit"); showPopUpView(); } }); lv.setOnItemClickListener(this); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, EditActivity.class); intent.putExtra("mode", 4); startActivityForResult(intent, 0); } }); } public void initPopUpView(){ layoutInflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); customView = (ViewGroup) layoutInflater.inflate(R.layout.setting_layout, null); coverView = (ViewGroup) layoutInflater.inflate(R.layout.setting_cover, null); main = findViewById(R.id.main_layout); wm = getWindowManager(); metrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(metrics); } public void showPopUpView(){ int width = metrics.widthPixels; int height = metrics.heightPixels; popupCover = new PopupWindow(coverView, width, height, false); popupWindow = new PopupWindow(customView, (int) (width * 0.7), height, true); popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE)); //在主界面加载成功之后 显示弹出 findViewById(R.id.main_layout).post(new Runnable() { @Override public void run() { popupCover.showAtLocation(main, Gravity.NO_GRAVITY, 0, 0); popupWindow.showAtLocation(main, Gravity.NO_GRAVITY, 0, 0); setting_image = customView.findViewById(R.id.setting_settings_image); setting_text = customView.findViewById(R.id.setting_settings_text); setting_image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, UserSettingsActivity.class)); } }); setting_text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, UserSettingsActivity.class)); } }); coverView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { popupWindow.dismiss(); return true; } }); popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { popupCover.dismiss(); Log.d(TAG, "onDismiss: test"); } }); } }); } public void initPrefs(){ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); SharedPreferences.Editor editor = sharedPreferences.edit(); if (!sharedPreferences.contains("nightMode")) { editor.putBoolean("nightMode", false); editor.commit(); } } // 接受startActivityForResult的结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ int returnMode; long note_Id; returnMode = data.getExtras().getInt("mode", -1); note_Id = data.getExtras().getLong("id", 0); if (returnMode == 1) { //update current note String content = data.getExtras().getString("content"); String time = data.getExtras().getString("time"); int tag = data.getExtras().getInt("tag", 1); Note newNote = new Note(content, time, tag); newNote.setId(note_Id); CRUD op = new CRUD(context); op.open(); op.updateNote(newNote); op.close(); } else if (returnMode == 0) { // create new note String content = data.getExtras().getString("content"); String time = data.getExtras().getString("time"); int tag = data.getExtras().getInt("tag", 1); Note newNote = new Note(content, time, tag); CRUD op = new CRUD(context); op.open(); op.addNote(newNote); op.close(); } else if (returnMode == 2) { // delete Note curNote = new Note(); curNote.setId(note_Id); CRUD op = new CRUD(context); op.open(); op.removeNote(curNote); op.close(); } else{ } refreshListView(); super.onActivityResult(requestCode, resultCode, data); } //判断笔记状态 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); //search setting MenuItem mSearch = menu.findItem(R.id.action_search); SearchView mSearchView = (SearchView) mSearch.getActionView(); mSearchView.setQueryHint("请输入搜索内容"); mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { adapter.getFilter().filter(newText); return false; } }); return super.onCreateOptionsMenu(menu); } //搜索 @Override public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case R.id.menu_clear: new AlertDialog.Builder(MainActivity.this) .setMessage("删除全部吗?") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dbHelper = new NoteDatabase(context); SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete("notes", null, null); db.execSQL("update sqlite_sequence set seq=0 where name='notes'"); refreshListView(); } }).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).create().show(); break; } return super.onOptionsItemSelected(item); } //主界面删除 public void refreshListView(){ CRUD op = new CRUD(context); op.open(); // set adapter if (noteList.size() > 0) noteList.clear(); noteList.addAll(op.getAllNotes()); op.close(); adapter.notifyDataSetChanged(); } //刷新list @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch (parent.getId()) { case R.id.lv: Note curNote = (Note) parent.getItemAtPosition(position); Intent intent = new Intent(MainActivity.this, EditActivity.class); intent.putExtra("content", curNote.getContent()); intent.putExtra("id", curNote.getId()); intent.putExtra("time", curNote.getTime()); intent.putExtra("mode", 3); // MODE of 'click to edit' intent.putExtra("tag", curNote.getTag()); startActivityForResult(intent, 1); //collect data from edit Log.d(TAG, "onItemClick: " + position); break; } } //携带数据 }
2.1 activity_main.xml
三、:EditActivity.java
package com.example.biji_1; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import java.text.SimpleDateFormat; import java.util.Date; public class EditActivity extends BaseActivity { EditText et; private Toolbar myToolbar; private String old_content = ""; private String old_time = ""; private int old_Tag = 1; private long id = 0; private int openMode = 0; private int tag = 1; public Intent intent = new Intent(); // message to be sent private boolean tagChange = false; private final String TAG = "tag"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.edit_layout); myToolbar = findViewById(R.id.myToolbar); setSupportActionBar(myToolbar); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); //设置toolbar取代actionbar myToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { autoSetMessage(); setResult(RESULT_OK, intent); finish(); } }); myToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { autoSetMessage(); setResult(RESULT_OK, intent); finish(); } }); et = findViewById(R.id.et_1); Intent getIntent = getIntent(); openMode = getIntent.getIntExtra("mode", 0); if (openMode == 3) {//打开已存在的note id = getIntent.getLongExtra("id", 0); old_content = getIntent.getStringExtra("content"); old_time = getIntent.getStringExtra("time"); old_Tag = getIntent.getIntExtra("tag", 1); et.setText(old_content); et.setSelection(old_content.length()); Log.d("TAG","打开"); } } //渲染菜单栏 @Override public boolean onCreateOptionsMenu(Menu menu_1) { getMenuInflater().inflate(R.menu.edit_menu,menu_1); return super.onCreateOptionsMenu(menu_1); } @Override public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case R.id.delete: new AlertDialog.Builder(EditActivity.this) .setMessage("删除吗?") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (openMode == 4){ // new note intent.putExtra("mode", -1); setResult(RESULT_OK, intent); } else { // existing note intent.putExtra("mode", 2); intent.putExtra("id", id); setResult(RESULT_OK, intent); } finish(); } }).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).create().show(); break; } return super.onOptionsItemSelected(item); } public boolean onKeyDown(int keyCode, KeyEvent event){ if (keyCode == KeyEvent.KEYCODE_HOME){ return true; } else if (keyCode == KeyEvent.KEYCODE_BACK){ autoSetMessage(); setResult(RESULT_OK, intent); finish(); return true; } return super.onKeyDown(keyCode, event); } public void autoSetMessage(){ if(openMode == 4){ if(et.getText().toString().length() == 0){ intent.putExtra("mode", -1); //nothing new happens. } else{ intent.putExtra("mode", 0); // new one note; intent.putExtra("content", et.getText().toString()); intent.putExtra("time", dateToStr()); intent.putExtra("tag", tag); } } else { if (et.getText().toString().equals(old_content) && !tagChange) intent.putExtra("mode", -1); // edit nothing else { intent.putExtra("mode", 1); //edit the content intent.putExtra("content", et.getText().toString()); intent.putExtra("time", dateToStr()); intent.putExtra("id", id); intent.putExtra("tag", tag); } } } public String dateToStr(){ Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return simpleDateFormat.format(date); } }
3.1 edit_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.appcompat.widget.Toolbar android:id="@+id/myToolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:elevation="4dp" app:titleTextColor="#FFEBCD" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> <EditText android:id="@+id/et_1" android:layout_width="match_parent" android:layout_height="100dp" android:gravity="top" /> </LinearLayout>
四、对笔记进行增删查改
CRUD.java
package com.example.biji_1; import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import java.util.ArrayList; import java.util.List; public class CRUD { SQLiteOpenHelper dbHandler; SQLiteDatabase db; private static final String[] columns = { NoteDatabase.ID, NoteDatabase.CONTENT, NoteDatabase.TIME, NoteDatabase.MODE }; public CRUD(Context context){ dbHandler = new NoteDatabase(context); } public void open(){ db = dbHandler.getWritableDatabase(); } public void close(){ dbHandler.close(); } //把note 加入到database里面 public Note addNote(Note note){ //add a note object to database ContentValues contentValues = new ContentValues(); contentValues.put(NoteDatabase.CONTENT, note.getContent()); contentValues.put(NoteDatabase.TIME, note.getTime()); contentValues.put(NoteDatabase.MODE, note.getTag()); long insertId = db.insert(NoteDatabase.TABLE_NAME, null, contentValues); note.setId(insertId); return note; } public Note getNote(long id){ //get a note from database using cursor index Cursor cursor = db.query(NoteDatabase.TABLE_NAME,columns,NoteDatabase.ID + "=?", new String[]{String.valueOf(id)},null,null, null, null); if (cursor != null) cursor.moveToFirst(); Note e = new Note(cursor.getString(1),cursor.getString(2), cursor.getInt(3)); return e; } @SuppressLint("Range") public List<Note> getAllNotes(){ Cursor cursor = db.query(NoteDatabase.TABLE_NAME,columns,null,null,null, null, null); List<Note> notes = new ArrayList<>(); if(cursor.getCount() > 0){ while(cursor.moveToNext()){ Note note = new Note(); note.setId(cursor.getLong(cursor.getColumnIndex(NoteDatabase.ID))); note.setContent(cursor.getString(cursor.getColumnIndex(NoteDatabase.CONTENT))); note.setTime(cursor.getString(cursor.getColumnIndex(NoteDatabase.TIME))); note.setTag(cursor.getInt(cursor.getColumnIndex(NoteDatabase.MODE))); notes.add(note); } } return notes; } //查找笔记 public int updateNote(Note note) { //update the info of an existing note ContentValues values = new ContentValues(); values.put(NoteDatabase.CONTENT, note.getContent()); values.put(NoteDatabase.TIME, note.getTime()); values.put(NoteDatabase.MODE, note.getTag()); // updating row return db.update(NoteDatabase.TABLE_NAME, values, NoteDatabase.ID + "=?",new String[] { String.valueOf(note.getId())}); } //更新笔记 public void removeNote(Note note) { //remove a note according to ID value db.delete(NoteDatabase.TABLE_NAME, NoteDatabase.ID + "=" + note.getId(), null); } //删除笔记 }
4.1 note_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingTop="5dp" android:paddingBottom="12dp" android:orientation="vertical" android:background="@drawable/note_shape"> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Content" android:textSize="20dp" android:textColor=" #00F5FF" android:singleLine="true" /> <TextView android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Time" android:textSize="16dp" android:textColor=" #00F5FF"/> </LinearLayout>
五、演示效果
5.1 登录界面
哈哈界面随自己走各位别喷
5.2笔记界面
之前自己写的
5.3增加记录
5.4删除记录
在主界面那个删除是删除全部会提示你 然后你点击进去之后还有一个删除那条记录的删除键 这里就不做演示了
5.5查找记录
哈哈
##5.6 改记录
改之前
改之后可以看到时间变化
其它效果靠这样演示不出来,源码在下面可以自取
5.6源码
上面给的代码不全 https://github.com/xiekangssq/local.git
总结
有写的各位看起来不适应的可以 评论指导
加载全部内容