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

avatar
作者
筋斗云
阅读量:9

成果展示:

 1.前期准备

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

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

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

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

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.example.ts_menu">        //这里注意修改成自己创建的包名      <uses-permission android:name="android.permission.CAMERA" />     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>      <application         android:allowBackup="true"         android:icon="@mipmap/ic_launcher"         android:label="@string/app_name"         android:roundIcon="@mipmap/ic_launcher_round"         android:supportsRtl="true"         android:theme="@style/AppTheme">         <activity android:name=".AddInfoActivity"></activity>         <activity android:name=".LoginActivity">             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>         <activity android:name=".MainActivity">         </activity>     </application>  </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

登录布局界面的实现

<?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"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     android:background="@drawable/bgone"     tools:context=".LoginActivity">     <TextView         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="用户登录"         android:textStyle="bold"         android:textColor="#000000"         android:textSize="40sp"         android:layout_margin="100dp"         android:gravity="center"/>      <LinearLayout         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:orientation="horizontal"         android:layout_margin="10dp">          <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="用户名:"             android:textColor="#000000"             android:textSize="30sp"        />         <EditText             android:id="@+id/editText_inputname"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:hint="请输入用户名"             android:textColor="#000000"             android:textSize="30sp"        />     </LinearLayout>      <LinearLayout         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:orientation="horizontal"         android:layout_margin="10dp">          <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="密    码:"             android:textColor="#000000"             android:textSize="30sp"        />         <EditText             android:id="@+id/editText_inputpwd"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:hint="请输入密码"             android:textColor="#000000"             android:inputType="textPassword"             android:textSize="30sp"        />     </LinearLayout>      <CheckBox         android:id="@+id/checkBox_reme"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="记住密码"         android:layout_gravity="right"         android:layout_margin="10dp"/>       <LinearLayout         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:orientation="horizontal"         android:layout_margin="10dp">          <Button             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="取消"             android:textColor="#000000"             android:textSize="30sp"             android:layout_weight="1"/>         <Button             android:id="@+id/button_login"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="登录"             android:textColor="#000000"             android:textSize="30sp"             android:layout_weight="1"/>     </LinearLayout> </LinearLayout>

2.2 activity_main.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"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     tools:context=".MainActivity">      <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="愿这小小的备忘录,记下我生活中的点点滴滴"         android:textStyle="bold"         android:textColor="#000000"         android:layout_gravity="center"         android:layout_margin="10dp"        />     <Button         android:id="@+id/button_add"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="添加备忘录"         android:textStyle="bold"         android:textColor="#000000"         android:layout_gravity="right"         android:background="@drawable/buttonbg"         android:layout_margin="10dp"        />     <android.support.v7.widget.RecyclerView         android:id="@+id/recy_view"         android:layout_width="match_parent"         android:layout_height="wrap_content"/>  </LinearLayout>

 2.3 activity_add_info.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"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     android:background="@drawable/bgthree"     tools:context=".AddInfoActivity">     <EditText         android:id="@+id/editText_title"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:hint="备忘录的标题"         android:textStyle="bold"         android:textColor="#000000"         android:textSize="30sp"/>     <View         android:layout_width="match_parent"         android:layout_height="2dp"         android:background="#009688"         android:layout_marginTop="-10dp"/>     <EditText         android:id="@+id/editText_content"         android:layout_width="match_parent"         android:layout_height="200dp"         android:hint="备忘录的内容"         android:textStyle="bold"         android:textColor="#000000"         android:textSize="20sp"         android:gravity="top"/>     <View         android:layout_width="match_parent"         android:layout_height="2dp"         android:background="#009688"         android:layout_marginTop="-10dp"/>     <TextView         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="请选用下面的任一种方式,添加一张心情图片:"         android:textStyle="bold"         android:textColor="#000000"         android:textSize="15sp"         android:gravity="top"         android:layout_margin="10dp"/>     <LinearLayout         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:orientation="horizontal"         android:layout_margin="10dp">         <Button             android:id="@+id/button_camera"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="拍照"             android:textStyle="bold"             android:textColor="#000000"             android:textSize="15sp"             android:layout_margin="10dp"/>         <Button             android:id="@+id/button_photo"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="从图库中选择"             android:textStyle="bold"             android:textColor="#000000"             android:textSize="15sp"             android:layout_margin="10dp"/>     </LinearLayout>     <ImageView         android:id="@+id/imageView_preview"         android:layout_width="wrap_content"         android:layout_height="200dp"         android:src="@drawable/sunshine"         android:layout_marginBottom="20dp"         android:layout_gravity="center"/>      <Button         android:id="@+id/button_save"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="保存"         android:textStyle="bold"         android:textColor="#000000"         android:textSize="30sp"         android:background="@drawable/savebg"         android:layout_margin="10dp"/> </LinearLayout>

 2.4 recy_item.xml文件代码:

主界面--子布局界面

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="horizontal"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:background="#7AECCC"     android:id="@+id/item_layout"     android:layout_margin="5dp"    >      <LinearLayout         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:orientation="vertical"         android:layout_gravity="center"         android:layout_weight="1"         android:layout_margin="5dp"         >         <TextView             android:id="@+id/item_title"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:text="标题"             android:textSize="20sp"             android:textStyle="bold"             android:textColor="#000000"/>         <TextView             android:id="@+id/item_content"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="内容"             android:textColor="#000000"/>     </LinearLayout>      <LinearLayout         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:orientation="vertical"         android:layout_margin="5dp">         <ImageView             android:id="@+id/item_image"             android:layout_width="100dp"             android:layout_height="100dp"             android:src="@mipmap/ic_launcher_round"/>         <TextView             android:id="@+id/item_time"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="时间"             android:textColor="#000000"             android:layout_gravity="center"/>     </LinearLayout>  </LinearLayout>

3.所需的java类文件

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

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

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

 3.1 MemoAdapter文件代码:

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

package com.example.ts_menu.adapter; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.graphics.drawable.GradientDrawable; import android.os.Build;  import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView;  import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.recyclerview.widget.RecyclerView;  import com.bumptech.glide.Glide; import com.example.ts_menu.R; import com.example.ts_menu.bean.MemoBean; import com.example.ts_menu.db.MyDbHelper;   import java.util.List; import java.util.Random; //1 类文件后面添加泛型 //2 鼠标定位类文件行红色波浪线处,Alt+Enter键:添加未实现的方法 //3 鼠标定位类文件行ViewHolder处,Alt+Enter键:添加内部类 //4 鼠标定位界面最下方内部类ViewHolder处,添加extends  RecyclerView.ViewHolder //5 鼠标定位界面最下方内部类ViewHolder红色波浪线处,Alt+Enter键:添加构造方法 //6 定义两个对象:上下文环境和数组 //7 定义两个对象下方的空白处:Alt+Insert键,添加适配器的构造方法  public class MemoAdapter extends RecyclerView.Adapter<MemoAdapter.ViewHolder>  {     private Context mcontext;     private List<MemoBean> arr1;     private MyDbHelper mhelper1;     private SQLiteDatabase db;      public MemoAdapter(Context mcontext, List<MemoBean> arr1) {         this.mcontext = mcontext;         this.arr1 = arr1;     }      //负责加载item布局     @NonNull     @Override     public MemoAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {         View view= LayoutInflater.from(mcontext).inflate(R.layout.recy_item,parent,false);         ViewHolder mholder=new ViewHolder(view);         return mholder;     }       //负责加载item的数据     @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)     @Override     public void onBindViewHolder(@NonNull MemoAdapter.ViewHolder mholder, final int i) {         final MemoBean memoBean=arr1.get(i);         mholder.item_title.setText(memoBean.getTitle());         mholder.item_content.setText(memoBean.getContent());         mholder.item_time.setText(memoBean.getTime());         Glide.with(mcontext).load(memoBean.getImgpath()).into(mholder.item_img);          // 完善:设置RecyclerView中每一个子项的颜色和形状         Random random = new Random();         int color = Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256));         GradientDrawable gradientDrawable = new GradientDrawable();         gradientDrawable.setShape(GradientDrawable.RECTANGLE);//形状         gradientDrawable.setCornerRadius(10f);//设置圆角Radius         gradientDrawable.setColor(color);//颜色         mholder.item_layout.setBackground(gradientDrawable);//设置为background          //完善:单击其中的一个子项,弹出删除功能         mholder.item_layout.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 //弹出对话框,删除                 AlertDialog.Builder dialog=new AlertDialog.Builder(mcontext);                 dialog.setMessage("确定删除吗?");                 dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {                     @Override                     public void onClick(DialogInterface dialogInterface, int abc) {                         //从数据库当中删除掉                         mhelper1= new MyDbHelper(mcontext);                         db=mhelper1.getWritableDatabase();                         db.delete("tb_memory","title=?",new String[]{arr1.get(i).getTitle()});                         arr1.remove(i);                         notifyItemRemoved(i);                         dialogInterface.dismiss();                      }                 });                 dialog.setNegativeButton("取消",null);                 dialog.setCancelable(false);                 dialog.create();                 dialog.show();              }         });      }      //recyView一共有多少个子项     @Override     public int getItemCount() {         return arr1.size();     }      public class ViewHolder  extends  RecyclerView.ViewHolder{         TextView item_title,item_content,item_time;         ImageView item_img;         LinearLayout item_layout;         public ViewHolder(@NonNull View itemView) {             super(itemView);             item_title=itemView.findViewById(R.id.item_title);             item_content=itemView.findViewById(R.id.item_content);             item_img=itemView.findViewById(R.id.item_image);             item_time=itemView.findViewById(R.id.item_time);             item_layout=itemView.findViewById(R.id.item_layout);          }     } } 

3.2 MemoBean文件代码: 

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

package com.example.ts_menu.bean;  public class MemoBean {         private  String title;         private String content;         private String imgpath;         private String time;          public MemoBean(String title, String content, String imgpath, String time) {             this.title = title;             this.content = content;             this.imgpath = imgpath;             this.time = time;         }          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 getImgpath() {             return imgpath;         }          public void setImgpath(String imgpath) {             this.imgpath = imgpath;         }          public String getTime() {             return time;         }          public void setTime(String time) {             this.time = time;         }     }   

3.3 MydbHelper文件代码: 

数据库文件

package com.example.ts_menu.db;  import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;  public class MyDbHelper extends SQLiteOpenHelper {     private  static String DBNAME="zsmemo.db";     private  static int VERSION=1;     //构造方法     public MyDbHelper( Context context) {         super(context, DBNAME, null, VERSION);     }     // 创建数据库     @Override     public void onCreate(SQLiteDatabase db) {         //创建数据表         db.execSQL("create table tb_memory(_id Integer primary key,title String (200),content String (2000),imgpath String (200),mtime String (50))");     }     //升级数据库     @Override     public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {     } }  

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";

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

package com.example.ts_menu; import android.content.ContentValues; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore;  import android.os.Bundle; import android.text.format.Time; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast;  import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity;  import com.blankj.utilcode.util.UriUtils; import com.bumptech.glide.Glide; import com.example.ts_menu.db.MyDbHelper; import com.example.ts_menu.db.MyDbHelper;  import java.io.File; import java.io.IOException;  public class AddInfoActivity extends AppCompatActivity {     //定义对象     EditText edit_title,edit_content;     Button btn_camera,btn_photo,btn_save;     ImageView img_preview;     String tmp_path,disp_path;     MyDbHelper mhelper;     SQLiteDatabase db;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_add_info);         //1 绑定控件         initView();          //2 单击按钮、拍照、从图库中选择照片         btnOnClick();          //3 接受拍好照片、接受从图库当中选择的照片 ------方法:系统回调          //4 把信息保存到数据库中         btnSave();     }       //1 绑定控件-----代码     private void initView() {         edit_title=findViewById(R.id.editText_title);         edit_content=findViewById(R.id.editText_content);         btn_camera=findViewById(R.id.button_camera);         btn_photo=findViewById(R.id.button_photo);         img_preview=findViewById(R.id.imageView_preview);         btn_save=findViewById(R.id.button_save);         mhelper=new MyDbHelper(AddInfoActivity.this);         db= mhelper.getWritableDatabase();     }       //2 单击按钮、拍照----------代码     private void btnOnClick() {         btn_camera.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 //拍照                 Time time=new Time();                 time.setToNow();                 String randtime=time.year+(time.month+1)+time.monthDay+time.hour+time.minute+time.second+"";                // tmp_path= Environment.getExternalStorageDirectory()+"/image"+ randtime+".jpg";                   tmp_path=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath()+"/image"+randtime+".jpg";                 File imgfile=new File(tmp_path);                 try {                     imgfile.createNewFile();                 } catch (IOException e) {                     e.printStackTrace();                 }                 Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");                 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imgfile) );                 startActivityForResult(intent,11);              }         });         btn_photo.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 //选择照片                 Intent intent=new Intent("android.intent.action.GET_CONTENT");                 intent.setType("image/*");                 startActivityForResult(intent,22);             }         });     }       //3 接受拍好照片、接受从图库当中选择的照片 ------方法:系统回调      @Override     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {         switch (requestCode){             case 11:                 if(resultCode==RESULT_OK){                     disp_path=tmp_path;                     Glide.with(AddInfoActivity.this).load(disp_path).into(img_preview);                 }                 break;             case 22:                 Uri imageuri=data.getData();                 if (imageuri==null)                 {                     return;                 }                 disp_path=UriUtils.uri2File(imageuri).getPath();                 Glide.with(AddInfoActivity.this).load(disp_path).into(img_preview);                 break;             default:                 break;         }     }      //4 把信息保存到数据库中-------------代码     private void btnSave() {         btn_save.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 //保存信息到数据库代码                 Time time=new Time();                 time.setToNow();                 ContentValues contentValues=new ContentValues();//一行                 contentValues.put("title",edit_title.getText().toString());//1行——1列                 contentValues.put("content",edit_content.getText().toString());//1行——3列                 contentValues.put("imgpath",disp_path);                 contentValues.put("mtime",time.year+"/"+(time.month+1)+"/"+time.monthDay);                 db.insert("tb_memory",null,contentValues);                 Toast.makeText(AddInfoActivity.this,"保存成功",Toast.LENGTH_SHORT).show();                  //跳转到主界面                 Intent intent=new Intent(AddInfoActivity.this,MainActivity.class);                 startActivity(intent);                 finish();             }         });     }  }  

3.5 LoginActivity文件代码:

package com.example.ts_menu; import android.content.Intent; import android.content.SharedPreferences; //import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText;  import androidx.appcompat.app.AppCompatActivity;  public class LoginActivity extends AppCompatActivity {     //定义对象     private EditText edit_inputname,edit_inputpwd;     private CheckBox check_reme;     private Button btn_login;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_login);         //1 绑定控件         initView();         //2 单击登录按钮,将用户名和密码保存起来         btnloginonClick();         //3 下次启动,直接显示用户名和密码         displayinfo();     }       //1 绑定控件--------代码     private void initView() {         edit_inputname=findViewById(R.id.editText_inputname);         edit_inputpwd=findViewById(R.id.editText_inputpwd);         check_reme=findViewById(R.id.checkBox_reme);         btn_login=findViewById(R.id.button_login);     }      //2 单击登录按钮,将用户名和密码保存起来----代码     private void btnloginonClick() {         btn_login.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 //保存用户名和密码                 SharedPreferences.Editor editor=getSharedPreferences("myinfo",0).edit();                 editor.putString("name",edit_inputname.getText().toString());                 editor.putString("pwd",edit_inputpwd.getText().toString());                 editor.putBoolean("st",check_reme.isChecked());                 editor.commit();                  //跳转到第二页                 Intent intent=new Intent(LoginActivity.this,MainActivity.class);                 startActivity(intent);             }         });     }      //3 下次启动,直接显示用户名和密码-----代码     private void displayinfo() {         String strname=getSharedPreferences("myinfo",0).getString("name","");         String strpwd=getSharedPreferences("myinfo",0).getString("pwd","");         Boolean status=getSharedPreferences("myinfo",0).getBoolean("st",false);         if(status==true){             edit_inputname.setText(strname);             edit_inputpwd.setText(strpwd);             check_reme.setChecked(true);         }else{             edit_inputname.setText("");             edit_inputpwd.setText("");             check_reme.setChecked(false);         }     }  }  

3.6 MainActivity文件代码:

package com.example.ts_menu; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase;  import android.os.Bundle;   import android.view.View; import android.widget.Adapter; import android.widget.Button;  import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager;  import com.example.ts_menu.adapter.MemoAdapter; import com.example.ts_menu.bean.MemoBean; import com.example.ts_menu.db.MyDbHelper;  import java.util.ArrayList; import java.util.List;  public class MainActivity extends AppCompatActivity {     //定义对象     private Button btn_add;     private RecyclerView recy_view;     private MyDbHelper mhelper;     SQLiteDatabase db;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         //1 绑定控件         initView();          //2 对单击添加单击事件         btnonclicknext();          //3完善:从数据库获取数据,显示到RecyclerView控件里面         recyDisplay();      }       //1 绑定控件-----------代码     private void initView() {         btn_add=findViewById(R.id.button_add);         recy_view=findViewById(R.id.recy_view);         mhelper=new MyDbHelper(MainActivity.this);         db=mhelper.getWritableDatabase();     }      //2 对单击添加单击事件-----代码     private void btnonclicknext() {         btn_add.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 //单击后跳转到一下页                 Intent intent=new Intent(MainActivity.this,AddInfoActivity.class);                 startActivity(intent);                 finish();             }         });     }      //3完善:从数据库获取数据,显示到RecyclerView控件里面---------------代码     private void recyDisplay() {         //3.1准备数据-----------标题、内容、图片、时间(类)         List<MemoBean> arr=new ArrayList();         //从数据库里面取数据了         Cursor  cursor=db.rawQuery("select * from tb_memory",null);         while(cursor.moveToNext()){             String mytitle=cursor.getString(cursor.getColumnIndex("title"));             String mycontent=cursor.getString(cursor.getColumnIndex("content"));             String myimgpath=cursor.getString(cursor.getColumnIndex("imgpath"));             String mymtime=cursor.getString(cursor.getColumnIndex("mtime"));             MemoBean memoBean=new MemoBean(mytitle,mycontent,myimgpath,mymtime);             arr.add(memoBean);         }         cursor.close();           //3.2 子布局 recy_item          //3.3 数据------桥(适配器MemoAdapter)----------------子布局         MemoAdapter adapter=new MemoAdapter(MainActivity.this,arr);         //3.4 确定显示的方式         StaggeredGridLayoutManager st=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);         recy_view.setLayoutManager(st);          //3.5 让数据显示出来         recy_view.setAdapter(adapter);     }  }  

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!