Signed-off-by: HuaJi <2868046948@qq.com>

Wangzj
HuaJi 2 years ago
parent c26308db5d
commit df4434b386

@ -0,0 +1,61 @@
package com.example.noteapp281;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import com.example.noteapp281.bean.Note;
import com.example.noteapp281.util.ToastUtil;
import java.text.SimpleDateFormat;
import java.util.Date;
public class AddActivity extends AppCompatActivity {
private EditText etTitle,etContent;
private NoteDbOpenHelper mNoteDbOpenHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
etTitle = findViewById(R.id.et_title);
etContent = findViewById(R.id.et_content);
mNoteDbOpenHelper = new NoteDbOpenHelper(this);
}
public void add(View view) {
String title = etTitle.getText().toString();
String content = etContent.getText().toString();
if (TextUtils.isEmpty(title)) {
ToastUtil.toastShort(this, "标题不能为空!");
return;
}
Note note = new Note();
note.setTitle(title);
note.setContent(content);
note.setCreatedTime(getCurrentTimeFormat());
long row = mNoteDbOpenHelper.insertData(note);
if (row != -1) {
ToastUtil.toastShort(this,"添加成功!");
this.finish();
}else {
ToastUtil.toastShort(this,"添加失败!");
}
}
private String getCurrentTimeFormat() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY年MM月dd HH:mm:ss");
Date date = new Date();
return simpleDateFormat.format(date);
}
}

@ -0,0 +1,71 @@
package com.example.noteapp281;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import com.example.noteapp281.bean.Note;
import com.example.noteapp281.util.ToastUtil;
import java.text.SimpleDateFormat;
import java.util.Date;
public class EditActivity extends AppCompatActivity {
private Note note;
private EditText etTitle,etContent;
private NoteDbOpenHelper mNoteDbOpenHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
etTitle = findViewById(R.id.et_title);
etContent = findViewById(R.id.et_content);
initData();
}
private void initData() {
Intent intent = getIntent();
note = (Note) intent.getSerializableExtra("note");
if (note != null) {
etTitle.setText(note.getTitle());
etContent.setText(note.getContent());
}
mNoteDbOpenHelper = new NoteDbOpenHelper(this);
}
public void save(View view) {
String title = etTitle.getText().toString();
String content = etContent.getText().toString();
if (TextUtils.isEmpty(title)) {
ToastUtil.toastShort(this, "标题不能为空!");
return;
}
note.setTitle(title);
note.setContent(content);
note.setCreatedTime(getCurrentTimeFormat());
long rowId = mNoteDbOpenHelper.updateData(note);
if (rowId != -1) {
ToastUtil.toastShort(this, "修改成功!");
this.finish();
}else{
ToastUtil.toastShort(this, "修改失败!");
}
}
private String getCurrentTimeFormat() {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY年MM月dd日 HH:mm:ss");
Date date = new Date();
return sdf.format(date);
}
}

@ -0,0 +1,191 @@
package com.example.noteapp281;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.noteapp281.adapter.MyAdapter;
import com.example.noteapp281.bean.Note;
import com.example.noteapp281.util.SpfUtil;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private FloatingActionButton mBtnAdd;
private List<Note> mNotes;
private MyAdapter mMyAdapter;
private NoteDbOpenHelper mNoteDbOpenHelper;
public static final int MODE_LINEAR = 0;
public static final int MODE_GRID = 1;
public static final String KEY_LAYOUT_MODE = "key_layout_mode";
private int currentListLayoutMode = MODE_LINEAR;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initEvent();
}
@Override
protected void onResume() {
super.onResume();
refreshDataFromDb();
setListLayout();
}
private void setListLayout() {
currentListLayoutMode = SpfUtil.getIntWithDefault(this, KEY_LAYOUT_MODE, MODE_LINEAR);
if (currentListLayoutMode == MODE_LINEAR) {
setToLinearList();
}else{
setToGridList();
}
}
private void refreshDataFromDb() {
mNotes = getDataFromDB();
mMyAdapter.refreshData(mNotes);
}
private void initEvent() {
mMyAdapter = new MyAdapter(this, mNotes);
mRecyclerView.setAdapter(mMyAdapter);
// LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
// mRecyclerView.setLayoutManager(linearLayoutManager);
// mMyAdapter.setViewType(MyAdapter.TYPE_LINEAR_LAYOUT);
setListLayout();
}
private void initData() {
mNotes = new ArrayList<>();
mNoteDbOpenHelper = new NoteDbOpenHelper(this);
//
// for (int i = 0; i < 30; i++) {
// Note note = new Note();
// note.setTitle("这是标题"+i);
// note.setContent("这是内容"+i);
// note.setCreatedTime(getCurrentTimeFormat());
// mNotes.add(note);
// }
// mNotes = getDataFromDB();
}
private List<Note> getDataFromDB() {
return mNoteDbOpenHelper.queryAllFromDb();
}
private String getCurrentTimeFormat() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd HH:mm:ss");
Date date = new Date();
return simpleDateFormat.format(date);
}
private void initView() {
mRecyclerView = findViewById(R.id.rlv);
}
public void add(View view) {
Intent intent = new Intent(this, AddActivity.class);
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
mNotes = mNoteDbOpenHelper.queryFromDbByTitle(newText);
mMyAdapter.refreshData(mNotes);
return true;
}
});
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
item.setChecked(true);
switch (item.getItemId()) {
case R.id.menu_linear:
setToLinearList();
currentListLayoutMode = MODE_LINEAR;
SpfUtil.saveInt(this,KEY_LAYOUT_MODE,MODE_LINEAR);
return true;
case R.id.menu_grid:
setToGridList();
currentListLayoutMode = MODE_GRID;
SpfUtil.saveInt(this,KEY_LAYOUT_MODE,MODE_GRID);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void setToLinearList() {
RecyclerView.LayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(linearLayoutManager);
mMyAdapter.setViewType(MyAdapter.TYPE_LINEAR_LAYOUT);
mMyAdapter.notifyDataSetChanged();
}
private void setToGridList() {
RecyclerView.LayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
mRecyclerView.setLayoutManager(gridLayoutManager);
mMyAdapter.setViewType(MyAdapter.TYPE_GRID_LAYOUT);
mMyAdapter.notifyDataSetChanged();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (currentListLayoutMode == MODE_LINEAR) {
MenuItem item = menu.findItem(R.id.menu_linear);
item.setChecked(true);
} else {
menu.findItem(R.id.menu_grid).setChecked(true);
}
return super.onPrepareOptionsMenu(menu);
}
}

@ -0,0 +1,130 @@
package com.example.noteapp281;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.text.TextUtils;
import com.example.noteapp281.bean.Note;
import java.util.ArrayList;
import java.util.List;
public class NoteDbOpenHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "noteSQLite.db";
private static final String TABLE_NAME_NOTE = "note";
private static final String CREATE_TABLE_SQL = "create table " + TABLE_NAME_NOTE + " (id integer primary key autoincrement, title text, content text, create_time text)";
public NoteDbOpenHelper(Context context) {
super(context, DB_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public long insertData(Note note) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put("title", note.getTitle());
values.put("content", note.getContent());
values.put("create_time", note.getCreatedTime());
return db.insert(TABLE_NAME_NOTE, null, values);
}
public int deleteFromDbById(String id) {
SQLiteDatabase db = getWritableDatabase();
// return db.delete(TABLE_NAME_NOTE, "id = ?", new String[]{id});
// return db.delete(TABLE_NAME_NOTE, "id is ?", new String[]{id});
return db.delete(TABLE_NAME_NOTE, "id like ?", new String[]{id});
}
public int updateData(Note note) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put("title", note.getTitle());
values.put("content", note.getContent());
values.put("create_time", note.getCreatedTime());
return db.update(TABLE_NAME_NOTE, values, "id like ?", new String[]{note.getId()});
}
public List<Note> queryAllFromDb() {
SQLiteDatabase db = getWritableDatabase();
List<Note> noteList = new ArrayList<>();
Cursor cursor = db.query(TABLE_NAME_NOTE, null, null, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex("id"));
String title = cursor.getString(cursor.getColumnIndex("title"));
String content = cursor.getString(cursor.getColumnIndex("content"));
String createTime = cursor.getString(cursor.getColumnIndex("create_time"));
Note note = new Note();
note.setId(id);
note.setTitle(title);
note.setContent(content);
note.setCreatedTime(createTime);
noteList.add(note);
}
cursor.close();
}
return noteList;
}
public List<Note> queryFromDbByTitle(String title) {
if (TextUtils.isEmpty(title)) {
return queryAllFromDb();
}
SQLiteDatabase db = getWritableDatabase();
List<Note> noteList = new ArrayList<>();
Cursor cursor = db.query(TABLE_NAME_NOTE, null, "title like ?", new String[]{"%"+title+"%"}, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex("id"));
String title2 = cursor.getString(cursor.getColumnIndex("title"));
String content = cursor.getString(cursor.getColumnIndex("content"));
String createTime = cursor.getString(cursor.getColumnIndex("create_time"));
Note note = new Note();
note.setId(id);
note.setTitle(title2);
note.setContent(content);
note.setCreatedTime(createTime);
noteList.add(note);
}
cursor.close();
}
return noteList;
}
}

@ -0,0 +1,230 @@
package com.example.noteapp281.adapter;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.noteapp281.EditActivity;
import com.example.noteapp281.NoteDbOpenHelper;
import com.example.noteapp281.R;
import com.example.noteapp281.bean.Note;
import com.example.noteapp281.util.ToastUtil;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Note> mBeanList;
private LayoutInflater mLayoutInflater;
private Context mContext;
private NoteDbOpenHelper mNoteDbOpenHelper;
private int viewType;
public static int TYPE_LINEAR_LAYOUT = 0;
public static int TYPE_GRID_LAYOUT = 1;
public MyAdapter(Context context, List<Note> mBeanList){
this.mBeanList = mBeanList;
this.mContext = context;
mLayoutInflater = LayoutInflater.from(mContext);
mNoteDbOpenHelper = new NoteDbOpenHelper(mContext);
}
public void setViewType(int viewType) {
this.viewType = viewType;
}
@Override
public int getItemViewType(int position) {
return viewType;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == TYPE_LINEAR_LAYOUT){
View view = mLayoutInflater.inflate(R.layout.list_item_layout, parent, false);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}else if(viewType == TYPE_GRID_LAYOUT){
View view = mLayoutInflater.inflate(R.layout.list_item_grid_layout, parent, false);
MyGridViewHolder myGridViewHolder = new MyGridViewHolder(view);
return myGridViewHolder;
}
return null;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder == null) {
return;
}
if(holder instanceof MyViewHolder){
bindMyViewHolder((MyViewHolder) holder, position);
} else if (holder instanceof MyGridViewHolder) {
bindGridViewHolder((MyGridViewHolder) holder, position);
}
}
private void bindMyViewHolder(MyViewHolder holder, int position) {
Note note = mBeanList.get(position);
holder.mTvTitle.setText(note.getTitle());
holder.mTvContent.setText(note.getContent());
holder.mTvTime.setText(note.getCreatedTime());
holder.rlContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, EditActivity.class);
intent.putExtra("note", note);
mContext.startActivity(intent);
}
});
holder.rlContainer.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// 弹出弹窗
Dialog dialog = new Dialog(mContext, android.R.style.ThemeOverlay_Material_Dialog_Alert);
View dialogView = mLayoutInflater.inflate(R.layout.list_item_dialog_layout, null);
TextView tvDelete = dialogView.findViewById(R.id.tv_delete);
TextView tvEdit = dialogView.findViewById(R.id.tv_edit);
tvDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int row = mNoteDbOpenHelper.deleteFromDbById(note.getId());
if (row > 0) {
removeData(position);
}
dialog.dismiss();
}
});
tvEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, EditActivity.class);
intent.putExtra("note", note);
mContext.startActivity(intent);
dialog.dismiss();
}
});
dialog.setContentView(dialogView);
dialog.setCanceledOnTouchOutside(true);
dialog.show();
return true;
}
});
}
private void bindGridViewHolder(MyGridViewHolder holder, int position) {
Note note = mBeanList.get(position);
holder.mTvTitle.setText(note.getTitle());
holder.mTvContent.setText(note.getContent());
holder.mTvTime.setText(note.getCreatedTime());
holder.rlContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, EditActivity.class);
intent.putExtra("note", note);
mContext.startActivity(intent);
}
});
holder.rlContainer.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// 弹出弹窗
Dialog dialog = new Dialog(mContext, android.R.style.ThemeOverlay_Material_Dialog_Alert);
View dialogView = mLayoutInflater.inflate(R.layout.list_item_dialog_layout, null);
TextView tvDelete = dialogView.findViewById(R.id.tv_delete);
TextView tvEdit = dialogView.findViewById(R.id.tv_edit);
tvDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int row = mNoteDbOpenHelper.deleteFromDbById(note.getId());
if (row > 0) {
removeData(position);
}
dialog.dismiss();
}
});
tvEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, EditActivity.class);
intent.putExtra("note", note);
mContext.startActivity(intent);
dialog.dismiss();
}
});
dialog.setContentView(dialogView);
dialog.setCanceledOnTouchOutside(true);
dialog.show();
return true;
}
});
}
@Override
public int getItemCount() {
return mBeanList.size();
}
public void refreshData(List<Note> notes) {
this.mBeanList = notes;
notifyDataSetChanged();
}
public void removeData(int pos) {
mBeanList.remove(pos);
notifyItemRemoved(pos);
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView mTvTitle;
TextView mTvContent;
TextView mTvTime;
ViewGroup rlContainer;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
this.mTvTitle = itemView.findViewById(R.id.tv_title);
this.mTvContent = itemView.findViewById(R.id.tv_content);
this.mTvTime = itemView.findViewById(R.id.tv_time);
this.rlContainer = itemView.findViewById(R.id.rl_item_container);
}
}
class MyGridViewHolder extends RecyclerView.ViewHolder{
TextView mTvTitle;
TextView mTvContent;
TextView mTvTime;
ViewGroup rlContainer;
public MyGridViewHolder(@NonNull View itemView) {
super(itemView);
this.mTvTitle = itemView.findViewById(R.id.tv_title);
this.mTvContent = itemView.findViewById(R.id.tv_content);
this.mTvTime = itemView.findViewById(R.id.tv_time);
this.rlContainer = itemView.findViewById(R.id.rl_item_container);
}
}
}

@ -0,0 +1,54 @@
package com.example.noteapp281.bean;
import java.io.Serializable;
public class Note implements Serializable {
private String title;
private String content;
private String createdTime;
private String 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 getCreatedTime() {
return createdTime;
}
public void setCreatedTime(String createdTime) {
this.createdTime = createdTime;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "Note{" +
"title='" + title + '\'' +
", content='" + content + '\'' +
", createdTime='" + createdTime + '\'' +
", id='" + id + '\'' +
'}';
}
}

@ -0,0 +1,38 @@
package com.example.noteapp281.util;
import android.content.Context;
import android.content.SharedPreferences;
public class SpfUtil {
private static String SPF_NAME = "noteSpf";
public static void saveString(Context context, String key, String value) {
SharedPreferences spf = context.getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor edit = spf.edit();
edit.putString(key, value);
edit.apply();
}
public static String getString(Context context, String key) {
SharedPreferences spf = context.getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE);
return spf.getString(key, "");
}
public static void saveInt(Context context, String key, int value) {
SharedPreferences spf = context.getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor edit = spf.edit();
edit.putInt(key, value);
edit.apply();
}
public static int getInt(Context context, String key) {
SharedPreferences spf = context.getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE);
return spf.getInt(key, -1);
}
public static int getIntWithDefault(Context context, String key, int defValue) {
SharedPreferences spf = context.getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE);
return spf.getInt(key, defValue);
}
}

@ -0,0 +1,15 @@
package com.example.noteapp281.util;
import android.content.Context;
import android.widget.Toast;
public class ToastUtil {
public static void toastShort(Context context, String msg) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
public static void toastLong(Context context, String msg) {
Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
}
}
Loading…
Cancel
Save