当前位置:   article > 正文

android studio项目实战——备忘录(附源码)

android studio项目实战——备忘录(附源码)

成果展示:

 1.前期准备

(1)在配置文件中添加权限及启动页面顺序

①展开工程,打开app下方的AndroidManifest.xml,添加权限,如下:

<uses-permission android:name="android.permission.CAMERA"/>
<
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

② 依旧在AndroidManifest.xml文件中添加启动页面顺序的功能代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.ts_menu"> //这里注意修改成自己创建的包名
  4. <uses-permission android:name="android.permission.CAMERA" />
  5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  6. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  7. <application
  8. android:allowBackup="true"
  9. android:icon="@mipmap/ic_launcher"
  10. android:label="@string/app_name"
  11. android:roundIcon="@mipmap/ic_launcher_round"
  12. android:supportsRtl="true"
  13. android:theme="@style/AppTheme">
  14. <activity android:name=".AddInfoActivity"></activity>
  15. <activity android:name=".LoginActivity">
  16. <intent-filter>
  17. <action android:name="android.intent.action.MAIN" />
  18. <category android:name="android.intent.category.LAUNCHER" />
  19. </intent-filter>
  20. </activity>
  21. <activity android:name=".MainActivity">
  22. </activity>
  23. </application>
  24. </manifest>

(2)添加依赖

展开工程,打开app下方的build.gradle ,添加依赖,如下:依赖添加好之后,要记着同步,在页面右上角的位置单击:Sync Now  即可。

implementation 'com.android.support:recyclerview-v7:+'
implementation 'com.github.bumptech.glide:glide:4.9.0'
api 'com.blankj:utilcode:1.23.7'

(3)素材

一共5张图片,粘贴到工程的drawable文件夹下来,其中bgone.png,bgthree.jpg两个图片是登录界面和信息添加界面的背景,buttonbg.png,savebg.png图片是添加备忘录按钮和保存按钮的背景,另外一张背景图片是sunshine.jpg是一张默认显示的照片。选择你自己喜欢的图片添加进去吧!

2.所需的布局文件

 2.1 activity_login.xml

登录布局界面的实现

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:orientation="vertical"
  8. android:background="@drawable/bgone"
  9. tools:context=".LoginActivity">
  10. <TextView
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:text="用户登录"
  14. android:textStyle="bold"
  15. android:textColor="#000000"
  16. android:textSize="40sp"
  17. android:layout_margin="100dp"
  18. android:gravity="center"/>
  19. <LinearLayout
  20. android:layout_width="match_parent"
  21. android:layout_height="wrap_content"
  22. android:orientation="horizontal"
  23. android:layout_margin="10dp">
  24. <TextView
  25. android:layout_width="wrap_content"
  26. android:layout_height="wrap_content"
  27. android:text="用户名:"
  28. android:textColor="#000000"
  29. android:textSize="30sp" />
  30. <EditText
  31. android:id="@+id/editText_inputname"
  32. android:layout_width="match_parent"
  33. android:layout_height="wrap_content"
  34. android:hint="请输入用户名"
  35. android:textColor="#000000"
  36. android:textSize="30sp" />
  37. </LinearLayout>
  38. <LinearLayout
  39. android:layout_width="match_parent"
  40. android:layout_height="wrap_content"
  41. android:orientation="horizontal"
  42. android:layout_margin="10dp">
  43. <TextView
  44. android:layout_width="wrap_content"
  45. android:layout_height="wrap_content"
  46. android:text="密 码:"
  47. android:textColor="#000000"
  48. android:textSize="30sp" />
  49. <EditText
  50. android:id="@+id/editText_inputpwd"
  51. android:layout_width="match_parent"
  52. android:layout_height="wrap_content"
  53. android:hint="请输入密码"
  54. android:textColor="#000000"
  55. android:inputType="textPassword"
  56. android:textSize="30sp" />
  57. </LinearLayout>
  58. <CheckBox
  59. android:id="@+id/checkBox_reme"
  60. android:layout_width="wrap_content"
  61. android:layout_height="wrap_content"
  62. android:text="记住密码"
  63. android:layout_gravity="right"
  64. android:layout_margin="10dp"/>
  65. <LinearLayout
  66. android:layout_width="match_parent"
  67. android:layout_height="wrap_content"
  68. android:orientation="horizontal"
  69. android:layout_margin="10dp">
  70. <Button
  71. android:layout_width="wrap_content"
  72. android:layout_height="wrap_content"
  73. android:text="取消"
  74. android:textColor="#000000"
  75. android:textSize="30sp"
  76. android:layout_weight="1"/>
  77. <Button
  78. android:id="@+id/button_login"
  79. android:layout_width="wrap_content"
  80. android:layout_height="wrap_content"
  81. android:text="登录"
  82. android:textColor="#000000"
  83. android:textSize="30sp"
  84. android:layout_weight="1"/>
  85. </LinearLayout>
  86. </LinearLayout>

2.2 activity_main.xml文件代码:

添加备忘录界面

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:orientation="vertical"
  8. tools:context=".MainActivity">
  9. <TextView
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:text="愿这小小的备忘录,记下我生活中的点点滴滴"
  13. android:textStyle="bold"
  14. android:textColor="#000000"
  15. android:layout_gravity="center"
  16. android:layout_margin="10dp" />
  17. <Button
  18. android:id="@+id/button_add"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:text="添加备忘录"
  22. android:textStyle="bold"
  23. android:textColor="#000000"
  24. android:layout_gravity="right"
  25. android:background="@drawable/buttonbg"
  26. android:layout_margin="10dp" />
  27. <android.support.v7.widget.RecyclerView
  28. android:id="@+id/recy_view"
  29. android:layout_width="match_parent"
  30. android:layout_height="wrap_content"/>
  31. </LinearLayout>

 2.3 activity_add_info.xml文件代码:

备忘录信息添加布局界面

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:orientation="vertical"
  8. android:background="@drawable/bgthree"
  9. tools:context=".AddInfoActivity">
  10. <EditText
  11. android:id="@+id/editText_title"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:hint="备忘录的标题"
  15. android:textStyle="bold"
  16. android:textColor="#000000"
  17. android:textSize="30sp"/>
  18. <View
  19. android:layout_width="match_parent"
  20. android:layout_height="2dp"
  21. android:background="#009688"
  22. android:layout_marginTop="-10dp"/>
  23. <EditText
  24. android:id="@+id/editText_content"
  25. android:layout_width="match_parent"
  26. android:layout_height="200dp"
  27. android:hint="备忘录的内容"
  28. android:textStyle="bold"
  29. android:textColor="#000000"
  30. android:textSize="20sp"
  31. android:gravity="top"/>
  32. <View
  33. android:layout_width="match_parent"
  34. android:layout_height="2dp"
  35. android:background="#009688"
  36. android:layout_marginTop="-10dp"/>
  37. <TextView
  38. android:layout_width="match_parent"
  39. android:layout_height="wrap_content"
  40. android:text="请选用下面的任一种方式,添加一张心情图片:"
  41. android:textStyle="bold"
  42. android:textColor="#000000"
  43. android:textSize="15sp"
  44. android:gravity="top"
  45. android:layout_margin="10dp"/>
  46. <LinearLayout
  47. android:layout_width="match_parent"
  48. android:layout_height="wrap_content"
  49. android:orientation="horizontal"
  50. android:layout_margin="10dp">
  51. <Button
  52. android:id="@+id/button_camera"
  53. android:layout_width="wrap_content"
  54. android:layout_height="wrap_content"
  55. android:text="拍照"
  56. android:textStyle="bold"
  57. android:textColor="#000000"
  58. android:textSize="15sp"
  59. android:layout_margin="10dp"/>
  60. <Button
  61. android:id="@+id/button_photo"
  62. android:layout_width="wrap_content"
  63. android:layout_height="wrap_content"
  64. android:text="从图库中选择"
  65. android:textStyle="bold"
  66. android:textColor="#000000"
  67. android:textSize="15sp"
  68. android:layout_margin="10dp"/>
  69. </LinearLayout>
  70. <ImageView
  71. android:id="@+id/imageView_preview"
  72. android:layout_width="wrap_content"
  73. android:layout_height="200dp"
  74. android:src="@drawable/sunshine"
  75. android:layout_marginBottom="20dp"
  76. android:layout_gravity="center"/>
  77. <Button
  78. android:id="@+id/button_save"
  79. android:layout_width="match_parent"
  80. android:layout_height="wrap_content"
  81. android:text="保存"
  82. android:textStyle="bold"
  83. android:textColor="#000000"
  84. android:textSize="30sp"
  85. android:background="@drawable/savebg"
  86. android:layout_margin="10dp"/>
  87. </LinearLayout>

 2.4 recy_item.xml文件代码:

主界面--子布局界面

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="horizontal"
  4. android:layout_width="match_parent"
  5. android:layout_height="wrap_content"
  6. android:background="#7AECCC"
  7. android:id="@+id/item_layout"
  8. android:layout_margin="5dp" >
  9. <LinearLayout
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:orientation="vertical"
  13. android:layout_gravity="center"
  14. android:layout_weight="1"
  15. android:layout_margin="5dp"
  16. >
  17. <TextView
  18. android:id="@+id/item_title"
  19. android:layout_width="match_parent"
  20. android:layout_height="wrap_content"
  21. android:text="标题"
  22. android:textSize="20sp"
  23. android:textStyle="bold"
  24. android:textColor="#000000"/>
  25. <TextView
  26. android:id="@+id/item_content"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:text="内容"
  30. android:textColor="#000000"/>
  31. </LinearLayout>
  32. <LinearLayout
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:orientation="vertical"
  36. android:layout_margin="5dp">
  37. <ImageView
  38. android:id="@+id/item_image"
  39. android:layout_width="100dp"
  40. android:layout_height="100dp"
  41. android:src="@mipmap/ic_launcher_round"/>
  42. <TextView
  43. android:id="@+id/item_time"
  44. android:layout_width="wrap_content"
  45. android:layout_height="wrap_content"
  46. android:text="时间"
  47. android:textColor="#000000"
  48. android:layout_gravity="center"/>
  49. </LinearLayout>
  50. </LinearLayout>

3.所需的java类文件

以下是所需要添加的package,及java类文件。

package所需要添加的文件有adapter、bean、db三个package包。

java类文件除了开始的主文件MainActivity,还需添加MemoAdapter、MemoBean、MydbHelper、AddInfoActivity、LoginActivity5个java类文件。

 3.1 MemoAdapter文件代码:

备忘录的自定义适配器功能代码

  1. package com.example.ts_menu.adapter;
  2. import android.app.AlertDialog;
  3. import android.content.Context;
  4. import android.content.DialogInterface;
  5. import android.database.sqlite.SQLiteDatabase;
  6. import android.graphics.Color;
  7. import android.graphics.drawable.GradientDrawable;
  8. import android.os.Build;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.widget.ImageView;
  13. import android.widget.LinearLayout;
  14. import android.widget.TextView;
  15. import androidx.annotation.NonNull;
  16. import androidx.annotation.RequiresApi;
  17. import androidx.recyclerview.widget.RecyclerView;
  18. import com.bumptech.glide.Glide;
  19. import com.example.ts_menu.R;
  20. import com.example.ts_menu.bean.MemoBean;
  21. import com.example.ts_menu.db.MyDbHelper;
  22. import java.util.List;
  23. import java.util.Random;
  24. //1 类文件后面添加泛型
  25. //2 鼠标定位类文件行红色波浪线处,Alt+Enter键:添加未实现的方法
  26. //3 鼠标定位类文件行ViewHolder处,Alt+Enter键:添加内部类
  27. //4 鼠标定位界面最下方内部类ViewHolder处,添加extends RecyclerView.ViewHolder
  28. //5 鼠标定位界面最下方内部类ViewHolder红色波浪线处,Alt+Enter键:添加构造方法
  29. //6 定义两个对象:上下文环境和数组
  30. //7 定义两个对象下方的空白处:Alt+Insert键,添加适配器的构造方法
  31. public class MemoAdapter extends RecyclerView.Adapter<MemoAdapter.ViewHolder> {
  32. private Context mcontext;
  33. private List<MemoBean> arr1;
  34. private MyDbHelper mhelper1;
  35. private SQLiteDatabase db;
  36. public MemoAdapter(Context mcontext, List<MemoBean> arr1) {
  37. this.mcontext = mcontext;
  38. this.arr1 = arr1;
  39. }
  40. //负责加载item布局
  41. @NonNull
  42. @Override
  43. public MemoAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
  44. View view= LayoutInflater.from(mcontext).inflate(R.layout.recy_item,parent,false);
  45. ViewHolder mholder=new ViewHolder(view);
  46. return mholder;
  47. }
  48. //负责加载item的数据
  49. @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
  50. @Override
  51. public void onBindViewHolder(@NonNull MemoAdapter.ViewHolder mholder, final int i) {
  52. final MemoBean memoBean=arr1.get(i);
  53. mholder.item_title.setText(memoBean.getTitle());
  54. mholder.item_content.setText(memoBean.getContent());
  55. mholder.item_time.setText(memoBean.getTime());
  56. Glide.with(mcontext).load(memoBean.getImgpath()).into(mholder.item_img);
  57. // 完善:设置RecyclerView中每一个子项的颜色和形状
  58. Random random = new Random();
  59. int color = Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256));
  60. GradientDrawable gradientDrawable = new GradientDrawable();
  61. gradientDrawable.setShape(GradientDrawable.RECTANGLE);//形状
  62. gradientDrawable.setCornerRadius(10f);//设置圆角Radius
  63. gradientDrawable.setColor(color);//颜色
  64. mholder.item_layout.setBackground(gradientDrawable);//设置为background
  65. //完善:单击其中的一个子项,弹出删除功能
  66. mholder.item_layout.setOnClickListener(new View.OnClickListener() {
  67. @Override
  68. public void onClick(View view) {
  69. //弹出对话框,删除
  70. AlertDialog.Builder dialog=new AlertDialog.Builder(mcontext);
  71. dialog.setMessage("确定删除吗?");
  72. dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
  73. @Override
  74. public void onClick(DialogInterface dialogInterface, int abc) {
  75. //从数据库当中删除掉
  76. mhelper1= new MyDbHelper(mcontext);
  77. db=mhelper1.getWritableDatabase();
  78. db.delete("tb_memory","title=?",new String[]{arr1.get(i).getTitle()});
  79. arr1.remove(i);
  80. notifyItemRemoved(i);
  81. dialogInterface.dismiss();
  82. }
  83. });
  84. dialog.setNegativeButton("取消",null);
  85. dialog.setCancelable(false);
  86. dialog.create();
  87. dialog.show();
  88. }
  89. });
  90. }
  91. //recyView一共有多少个子项
  92. @Override
  93. public int getItemCount() {
  94. return arr1.size();
  95. }
  96. public class ViewHolder extends RecyclerView.ViewHolder{
  97. TextView item_title,item_content,item_time;
  98. ImageView item_img;
  99. LinearLayout item_layout;
  100. public ViewHolder(@NonNull View itemView) {
  101. super(itemView);
  102. item_title=itemView.findViewById(R.id.item_title);
  103. item_content=itemView.findViewById(R.id.item_content);
  104. item_img=itemView.findViewById(R.id.item_image);
  105. item_time=itemView.findViewById(R.id.item_time);
  106. item_layout=itemView.findViewById(R.id.item_layout);
  107. }
  108. }
  109. }

3.2 MemoBean文件代码: 

一个javabean文件,为了存储备忘录的信息

  1. package com.example.ts_menu.bean;
  2. public class MemoBean {
  3. private String title;
  4. private String content;
  5. private String imgpath;
  6. private String time;
  7. public MemoBean(String title, String content, String imgpath, String time) {
  8. this.title = title;
  9. this.content = content;
  10. this.imgpath = imgpath;
  11. this.time = time;
  12. }
  13. public String getTitle() {
  14. return title;
  15. }
  16. public void setTitle(String title) {
  17. this.title = title;
  18. }
  19. public String getContent() {
  20. return content;
  21. }
  22. public void setContent(String content) {
  23. this.content = content;
  24. }
  25. public String getImgpath() {
  26. return imgpath;
  27. }
  28. public void setImgpath(String imgpath) {
  29. this.imgpath = imgpath;
  30. }
  31. public String getTime() {
  32. return time;
  33. }
  34. public void setTime(String time) {
  35. this.time = time;
  36. }
  37. }

3.3 MydbHelper文件代码: 

数据库文件

  1. package com.example.ts_menu.db;
  2. import android.content.Context;
  3. import android.database.sqlite.SQLiteDatabase;
  4. import android.database.sqlite.SQLiteOpenHelper;
  5. public class MyDbHelper extends SQLiteOpenHelper {
  6. private static String DBNAME="zsmemo.db";
  7. private static int VERSION=1;
  8. //构造方法
  9. public MyDbHelper( Context context) {
  10. super(context, DBNAME, null, VERSION);
  11. }
  12. // 创建数据库
  13. @Override
  14. public void onCreate(SQLiteDatabase db) {
  15. //创建数据表
  16. db.execSQL("create table tb_memory(_id Integer primary key,title String (200),content String (2000),imgpath String (200),mtime String (50))");
  17. }
  18. //升级数据库
  19. @Override
  20. public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
  21. }
  22. }

3.4 AddInfoActivity文件代码: 

 拍照功能直接闪退:

if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N)
{
    StrictMode.VmPolicy.Builder builder=new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());
}

使用上述代码防止闪退。

在拍照功能时应该将保存路径代码改为tmp_path=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath()+"/image"+randtime+".jpg";

有效防止拍照后确定不了问题。

  1. package com.example.ts_menu;
  2. import android.content.ContentValues;
  3. import android.content.Intent;
  4. import android.database.sqlite.SQLiteDatabase;
  5. import android.net.Uri;
  6. import android.os.Environment;
  7. import android.provider.MediaStore;
  8. import android.os.Bundle;
  9. import android.text.format.Time;
  10. import android.view.View;
  11. import android.widget.Button;
  12. import android.widget.EditText;
  13. import android.widget.ImageView;
  14. import android.widget.Toast;
  15. import androidx.annotation.Nullable;
  16. import androidx.appcompat.app.AppCompatActivity;
  17. import com.blankj.utilcode.util.UriUtils;
  18. import com.bumptech.glide.Glide;
  19. import com.example.ts_menu.db.MyDbHelper;
  20. import com.example.ts_menu.db.MyDbHelper;
  21. import java.io.File;
  22. import java.io.IOException;
  23. public class AddInfoActivity extends AppCompatActivity {
  24. //定义对象
  25. EditText edit_title,edit_content;
  26. Button btn_camera,btn_photo,btn_save;
  27. ImageView img_preview;
  28. String tmp_path,disp_path;
  29. MyDbHelper mhelper;
  30. SQLiteDatabase db;
  31. @Override
  32. protected void onCreate(Bundle savedInstanceState) {
  33. super.onCreate(savedInstanceState);
  34. setContentView(R.layout.activity_add_info);
  35. //1 绑定控件
  36. initView();
  37. //2 单击按钮、拍照、从图库中选择照片
  38. btnOnClick();
  39. //3 接受拍好照片、接受从图库当中选择的照片 ------方法:系统回调
  40. //4 把信息保存到数据库中
  41. btnSave();
  42. }
  43. //1 绑定控件-----代码
  44. private void initView() {
  45. edit_title=findViewById(R.id.editText_title);
  46. edit_content=findViewById(R.id.editText_content);
  47. btn_camera=findViewById(R.id.button_camera);
  48. btn_photo=findViewById(R.id.button_photo);
  49. img_preview=findViewById(R.id.imageView_preview);
  50. btn_save=findViewById(R.id.button_save);
  51. mhelper=new MyDbHelper(AddInfoActivity.this);
  52. db= mhelper.getWritableDatabase();
  53. }
  54. //2 单击按钮、拍照----------代码
  55. private void btnOnClick() {
  56. btn_camera.setOnClickListener(new View.OnClickListener() {
  57. @Override
  58. public void onClick(View view) {
  59. //拍照
  60. Time time=new Time();
  61. time.setToNow();
  62. String randtime=time.year+(time.month+1)+time.monthDay+time.hour+time.minute+time.second+"";
  63. // tmp_path= Environment.getExternalStorageDirectory()+"/image"+ randtime+".jpg";
  64. tmp_path=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath()+"/image"+randtime+".jpg";
  65. File imgfile=new File(tmp_path);
  66. try {
  67. imgfile.createNewFile();
  68. } catch (IOException e) {
  69. e.printStackTrace();
  70. }
  71. Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
  72. intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imgfile) );
  73. startActivityForResult(intent,11);
  74. }
  75. });
  76. btn_photo.setOnClickListener(new View.OnClickListener() {
  77. @Override
  78. public void onClick(View view) {
  79. //选择照片
  80. Intent intent=new Intent("android.intent.action.GET_CONTENT");
  81. intent.setType("image/*");
  82. startActivityForResult(intent,22);
  83. }
  84. });
  85. }
  86. //3 接受拍好照片、接受从图库当中选择的照片 ------方法:系统回调
  87. @Override
  88. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  89. switch (requestCode){
  90. case 11:
  91. if(resultCode==RESULT_OK){
  92. disp_path=tmp_path;
  93. Glide.with(AddInfoActivity.this).load(disp_path).into(img_preview);
  94. }
  95. break;
  96. case 22:
  97. Uri imageuri=data.getData();
  98. if (imageuri==null)
  99. {
  100. return;
  101. }
  102. disp_path=UriUtils.uri2File(imageuri).getPath();
  103. Glide.with(AddInfoActivity.this).load(disp_path).into(img_preview);
  104. break;
  105. default:
  106. break;
  107. }
  108. }
  109. //4 把信息保存到数据库中-------------代码
  110. private void btnSave() {
  111. btn_save.setOnClickListener(new View.OnClickListener() {
  112. @Override
  113. public void onClick(View view) {
  114. //保存信息到数据库代码
  115. Time time=new Time();
  116. time.setToNow();
  117. ContentValues contentValues=new ContentValues();//一行
  118. contentValues.put("title",edit_title.getText().toString());//1行——1列
  119. contentValues.put("content",edit_content.getText().toString());//1行——3列
  120. contentValues.put("imgpath",disp_path);
  121. contentValues.put("mtime",time.year+"/"+(time.month+1)+"/"+time.monthDay);
  122. db.insert("tb_memory",null,contentValues);
  123. Toast.makeText(AddInfoActivity.this,"保存成功",Toast.LENGTH_SHORT).show();
  124. //跳转到主界面
  125. Intent intent=new Intent(AddInfoActivity.this,MainActivity.class);
  126. startActivity(intent);
  127. finish();
  128. }
  129. });
  130. }
  131. }

3.5 LoginActivity文件代码:

  1. package com.example.ts_menu;
  2. import android.content.Intent;
  3. import android.content.SharedPreferences;
  4. //import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.CheckBox;
  9. import android.widget.EditText;
  10. import androidx.appcompat.app.AppCompatActivity;
  11. public class LoginActivity extends AppCompatActivity {
  12. //定义对象
  13. private EditText edit_inputname,edit_inputpwd;
  14. private CheckBox check_reme;
  15. private Button btn_login;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_login);
  20. //1 绑定控件
  21. initView();
  22. //2 单击登录按钮,将用户名和密码保存起来
  23. btnloginonClick();
  24. //3 下次启动,直接显示用户名和密码
  25. displayinfo();
  26. }
  27. //1 绑定控件--------代码
  28. private void initView() {
  29. edit_inputname=findViewById(R.id.editText_inputname);
  30. edit_inputpwd=findViewById(R.id.editText_inputpwd);
  31. check_reme=findViewById(R.id.checkBox_reme);
  32. btn_login=findViewById(R.id.button_login);
  33. }
  34. //2 单击登录按钮,将用户名和密码保存起来----代码
  35. private void btnloginonClick() {
  36. btn_login.setOnClickListener(new View.OnClickListener() {
  37. @Override
  38. public void onClick(View view) {
  39. //保存用户名和密码
  40. SharedPreferences.Editor editor=getSharedPreferences("myinfo",0).edit();
  41. editor.putString("name",edit_inputname.getText().toString());
  42. editor.putString("pwd",edit_inputpwd.getText().toString());
  43. editor.putBoolean("st",check_reme.isChecked());
  44. editor.commit();
  45. //跳转到第二页
  46. Intent intent=new Intent(LoginActivity.this,MainActivity.class);
  47. startActivity(intent);
  48. }
  49. });
  50. }
  51. //3 下次启动,直接显示用户名和密码-----代码
  52. private void displayinfo() {
  53. String strname=getSharedPreferences("myinfo",0).getString("name","");
  54. String strpwd=getSharedPreferences("myinfo",0).getString("pwd","");
  55. Boolean status=getSharedPreferences("myinfo",0).getBoolean("st",false);
  56. if(status==true){
  57. edit_inputname.setText(strname);
  58. edit_inputpwd.setText(strpwd);
  59. check_reme.setChecked(true);
  60. }else{
  61. edit_inputname.setText("");
  62. edit_inputpwd.setText("");
  63. check_reme.setChecked(false);
  64. }
  65. }
  66. }

3.6 MainActivity文件代码:

  1. package com.example.ts_menu;
  2. import android.content.Intent;
  3. import android.database.Cursor;
  4. import android.database.sqlite.SQLiteDatabase;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Adapter;
  8. import android.widget.Button;
  9. import androidx.appcompat.app.AppCompatActivity;
  10. import androidx.recyclerview.widget.RecyclerView;
  11. import androidx.recyclerview.widget.StaggeredGridLayoutManager;
  12. import com.example.ts_menu.adapter.MemoAdapter;
  13. import com.example.ts_menu.bean.MemoBean;
  14. import com.example.ts_menu.db.MyDbHelper;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. public class MainActivity extends AppCompatActivity {
  18. //定义对象
  19. private Button btn_add;
  20. private RecyclerView recy_view;
  21. private MyDbHelper mhelper;
  22. SQLiteDatabase db;
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27. //1 绑定控件
  28. initView();
  29. //2 对单击添加单击事件
  30. btnonclicknext();
  31. //3完善:从数据库获取数据,显示到RecyclerView控件里面
  32. recyDisplay();
  33. }
  34. //1 绑定控件-----------代码
  35. private void initView() {
  36. btn_add=findViewById(R.id.button_add);
  37. recy_view=findViewById(R.id.recy_view);
  38. mhelper=new MyDbHelper(MainActivity.this);
  39. db=mhelper.getWritableDatabase();
  40. }
  41. //2 对单击添加单击事件-----代码
  42. private void btnonclicknext() {
  43. btn_add.setOnClickListener(new View.OnClickListener() {
  44. @Override
  45. public void onClick(View view) {
  46. //单击后跳转到一下页
  47. Intent intent=new Intent(MainActivity.this,AddInfoActivity.class);
  48. startActivity(intent);
  49. finish();
  50. }
  51. });
  52. }
  53. //3完善:从数据库获取数据,显示到RecyclerView控件里面---------------代码
  54. private void recyDisplay() {
  55. //3.1准备数据-----------标题、内容、图片、时间(类)
  56. List<MemoBean> arr=new ArrayList();
  57. //从数据库里面取数据了
  58. Cursor cursor=db.rawQuery("select * from tb_memory",null);
  59. while(cursor.moveToNext()){
  60. String mytitle=cursor.getString(cursor.getColumnIndex("title"));
  61. String mycontent=cursor.getString(cursor.getColumnIndex("content"));
  62. String myimgpath=cursor.getString(cursor.getColumnIndex("imgpath"));
  63. String mymtime=cursor.getString(cursor.getColumnIndex("mtime"));
  64. MemoBean memoBean=new MemoBean(mytitle,mycontent,myimgpath,mymtime);
  65. arr.add(memoBean);
  66. }
  67. cursor.close();
  68. //3.2 子布局 recy_item
  69. //3.3 数据------桥(适配器MemoAdapter)----------------子布局
  70. MemoAdapter adapter=new MemoAdapter(MainActivity.this,arr);
  71. //3.4 确定显示的方式
  72. StaggeredGridLayoutManager st=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
  73. recy_view.setLayoutManager(st);
  74. //3.5 让数据显示出来
  75. recy_view.setAdapter(adapter);
  76. }
  77. }

注意:activity文件中相关的名称报错,得换成自己所创建工程的名字。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/530603
推荐阅读
相关标签
  

闽ICP备14008679号