目录
一、项目测试视频
网络资源模板--基于Android Studio 记事本
二、项目简介
电子便签,使用移动数据库sqlite类,实现简单的数据增加、删除、修改、查询(通过标题为引索条件)
程序结构由MainActivity、AddActivity、EdiActivity、NoteDbOpenHelper、工具包util(内含自定义Toast类)、bean包、adapter包(适配器类)组成
三、项目测试环境
四、项目详情设计
这个代码是一个简单的 Android 应用程序,用于添加笔记。它包含一个 `AddActivity` 类,用于在用户输入标题和内容后将笔记保存到数据库中。以下是代码的主要功能:
1. 导入必要的类和库。
2. 在 `AddActivity` 类中,初始化界面元素和数据库助手对象。
3. 在 `onCreate` 方法中,设置布局和获取 EditText 对象以及数据库助手对象。
4. `add` 方法用于处理用户点击添加按钮的事件。它首先从 EditText 中获取标题和内容,然后检查标题是否为空。如果为空,显示相应的提示消息。然后创建一个 `Note` 对象,并设置标题、内容和创建时间。接下来,调用数据库助手的 `insertData` 方法将笔记插入数据库中。根据插入操作的结果显示相应的提示消息,并根据成功与否决定是否关闭当前活动。
5. `getCurrentTimeFormat` 方法用于获取当前时间,并以指定的格式返回时间字符串。
总的来说,这段代码实现了一个简单的添加笔记功能,用户可以输入标题和内容,然后将其保存到数据库中。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".AddActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/MyTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题" />
<EditText
android:id="@+id/et_title"
style="@style/MyEditStyle"
android:maxLines="1"
android:layout_width="match_parent"
android:layout_marginLeft="5dp" />
</LinearLayout>
<TextView
style="@style/MyTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="内容" />
<EditText
android:id="@+id/et_content"
style="@style/MyEditStyle"
android:layout_width="match_parent"
android:gravity="left"
android:layout_height="300dp"
android:layout_marginTop="5dp" />
<Button
style="@style/MyBtnStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="add"
android:text="添加" />
</LinearLayout>
</ScrollView>
这个MainActivity是一个笔记应用的主界面,主要功能包括:
1. 初始化界面:在onCreate()方法中初始化界面布局,初始化数据,设置事件监听器。
2. 刷新数据:在onResume()方法中从数据库刷新数据,然后根据当前的列表布局模式设置RecyclerView的布局。
3. 设置列表布局:根据用户的选择,可以切换列表的布局模式,支持线性布局和网格布局。
4. 数据操作:可以通过FloatingActionButton添加新的笔记,并且支持通过搜索功能查找笔记。
5. 数据持久化:使用SharedPreferences保存当前的列表布局模式,使用SQLite数据库进行笔记数据的增删改查操作。
这个MainActivity的代码逻辑清晰,功能完善,通过RecyclerView和Adapter实现了笔记列表的展示和管理,通过SharedPreferences保存用户偏好设置,通过SQLite数据库实现了笔记数据的持久化存储。
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);
}
}
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".EditActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/MyTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题" />
<EditText
android:id="@+id/et_title"
style="@style/MyEditStyle"
android:maxLines="1"
android:layout_width="match_parent"
android:layout_marginLeft="5dp" />
</LinearLayout>
<TextView
style="@style/MyTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="内容" />
<EditText
android:id="@+id/et_content"
style="@style/MyEditStyle"
android:layout_width="match_parent"
android:gravity="left"
android:layout_height="300dp"
android:layout_marginTop="5dp" />
<Button
style="@style/MyBtnStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="save"
android:text="保存" />
</LinearLayout>
</ScrollView>
Get 项目模板源码
👇👇👇快捷获取方式👇👇👇