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文件中添加启动页面顺序的功能代码

<?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"/><applicationandroid: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"><TextViewandroid: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"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_margin="10dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="用户名:"android:textColor="#000000"android:textSize="30sp"        /><EditTextandroid:id="@+id/editText_inputname"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入用户名"android:textColor="#000000"android:textSize="30sp"        /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_margin="10dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="密    码:"android:textColor="#000000"android:textSize="30sp"        /><EditTextandroid: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><CheckBoxandroid:id="@+id/checkBox_reme"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="记住密码"android:layout_gravity="right"android:layout_margin="10dp"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_margin="10dp"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="取消"android:textColor="#000000"android:textSize="30sp"android:layout_weight="1"/><Buttonandroid: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"><TextViewandroid: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"        /><Buttonandroid: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.RecyclerViewandroid: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"><EditTextandroid: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"/><Viewandroid:layout_width="match_parent"android:layout_height="2dp"android:background="#009688"android:layout_marginTop="-10dp"/><EditTextandroid: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"/><Viewandroid:layout_width="match_parent"android:layout_height="2dp"android:background="#009688"android:layout_marginTop="-10dp"/><TextViewandroid: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"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_margin="10dp"><Buttonandroid: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"/><Buttonandroid: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><ImageViewandroid: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"/><Buttonandroid: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"    ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:layout_gravity="center"android:layout_weight="1"android:layout_margin="5dp"><TextViewandroid: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"/><TextViewandroid:id="@+id/item_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="内容"android:textColor="#000000"/></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:layout_margin="5dp"><ImageViewandroid:id="@+id/item_image"android:layout_width="100dp"android:layout_height="100dp"android:src="@mipmap/ic_launcher_round"/><TextViewandroid: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@Overridepublic 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)@Overridepublic 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);//设置圆角RadiusgradientDrawable.setColor(color);//颜色mholder.item_layout.setBackground(gradientDrawable);//设置为background//完善:单击其中的一个子项,弹出删除功能mholder.item_layout.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//弹出对话框,删除AlertDialog.Builder dialog=new AlertDialog.Builder(mcontext);dialog.setMessage("确定删除吗?");dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic 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一共有多少个子项@Overridepublic 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);}// 创建数据库@Overridepublic 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))");}//升级数据库@Overridepublic 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;@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic void onClick(View view) {//选择照片Intent intent=new Intent("android.intent.action.GET_CONTENT");intent.setType("image/*");startActivityForResult(intent,22);}});}//3 接受拍好照片、接受从图库当中选择的照片 ------方法:系统回调@Overrideprotected 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() {@Overridepublic 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;@Overrideprotected 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() {@Overridepublic 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;@Overrideprotected 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() {@Overridepublic 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文件中相关的名称报错,得换成自己所创建工程的名字。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/317859.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony开源软件供应链安全风险

慕冬亮&#xff0c;华中科技大学网络空间安全学院副教授&#xff0c;武汉英才&#xff0c;华中科技大学OpenHarmony技术俱乐部、开放原子开源社团指导教师。研究方向为软件与系统安全&#xff0c;在国际安全会议上发表十余篇论文&#xff0c;并获得ACM CCS 2018杰出论文奖。创立…

Grafana页面嵌入自建Web应用页面

目录 一、应用场景 二、实现方式 1、修改Grafana配置文件 2、获取监控页面url 3、隐藏左侧和顶部菜单 一、应用场景 需要将Grafana监控页面嵌入自建Web应用页面&#xff0c;使Grafana监控页面成为自建Web应用的一部分。 二、实现方式 总体思路&#xff1a;修改Grafana配…

【R语言数据分析】基本运算与数据导入速查

R语言中命名可以包含英文字母&#xff0c;下划线&#xff0c;数字&#xff0c;点&#xff0c;下划线和数字不能作为名字的开头&#xff0c;点可以开头&#xff0c;但是点开头后面不能跟数字。一般的命名就是只使用英文和下划线就够了。 四则运算 R语言的除法是即使给的两个数…

展会资讯 | 现场精彩回顾 阿尔泰科技参展2024第23届中国国际(西部)光电产业!

2024第23届中国国际&#xff08;西部&#xff09;光电产业博览会&#xff0c;在成都世纪城新国际会展中心圆满落幕&#xff01;来自各地的光电领域设备及材料厂商汇聚一堂&#xff0c;展示前沿技术及创新成果。 展会现场&#xff0c;来自全国各地的500余家企业就精密光学、信息…

进迭时空宣布开源RISC-V芯片的AI核心技术

仟江水商业电讯&#xff08;4月29日 北京 委托发布&#xff09;4月29日&#xff0c;在“创芯生生不息——进迭时空2024年度产品发布会”上&#xff0c;进迭时空CEO、创始人&#xff0c;陈志坚博士宣布将开源进迭时空在自研RISC-V AI CPU上的核心技术&#xff0c;包括AI扩展指令…

C语言/数据结构——每日一题(合并两个有序链表)

一.前言 嗨嗨嗨&#xff0c;大家好久不见&#xff01;今天我在LeetCode看到了一道单链表题&#xff1a;https://leetcode.cn/problems/merge-two-sorted-lists想着和大家分享一下&#xff0c;废话不多说&#xff0c;让我们开始今天的题目分享吧。 二.正文 1.1题目描述 1.2题…

智慧旅游驱动行业革新:智能技术引领服务全面升级,匠心打造高品质、个性化旅游新体验

一、引言 随着科技的飞速发展和信息化程度的不断提高&#xff0c;智慧旅游正逐渐成为旅游业发展的新趋势。智慧旅游&#xff0c;顾名思义&#xff0c;是以智能化技术为支撑&#xff0c;通过大数据、云计算、物联网、人工智能等先进技术的应用&#xff0c;实现旅游服务的全面升…

袁庭新ES系列17节|Spring Data Elasticsearch基础

前言 为了简化对Elasticsearch的操作Spring Data提供了Spring Data Elasticsearch。Spring Data Elasticsearch是Spring Data技术对Elasticsearch原生API封装之后的产物&#xff0c;它通过对原生API的封装&#xff0c;使得程序员可以简单的对Elasticsearch进行各种操作。接下来…

HarmonyOS 4.0(鸿蒙开发)01 - 怎么学习鸿蒙引导篇

作为公司的全栈开发工程师 以及 未来的发展是有鸿蒙这个阶段的&#xff0c;以及本身具有这个技术栈由此后续会分享自己在实战中学习到的东西&#xff0c;碰到的bug都会分享出来&#xff0c;这是引导篇期待后续的更新 学习目标&#xff1a; 理解HarmonyOS操作系统的架构和开发…

Javascript:Web APIs(一)

Javascript基础&#xff08;一&#xff09; Javascript基础&#xff08;二&#xff09; Javascript基础&#xff08;三&#xff09; Javascript基础已经结束&#xff0c;接下来我们将进入到整个Web API学习中&#xff0c;在此&#xff0c;我们将学习DOM操作&#xff0c;基本的…

普乐蛙景区vr体验馆VR游乐场设备身历其境体验

小编给大家推荐一款gao坪效产品【暗黑战车】&#xff0c;一次6人同乘&#xff0c;炫酷外观、强大性能和丰富内容适合各个年龄层客群&#xff0c;紧张刺激的VR体验让玩家沉浸在元宇宙的魅力中&#xff0c;无论是节假日还是平日&#xff0c;景区商场助力门店提高客流量和营收~ ◆…

IGM焊接机器人RTE 495伺服电机维修详情一览

在当今科技迅速发展的时代&#xff0c;机器人已成为各行各业不可或缺的重要工具。IGM机器人便是其中之一&#xff0c;其工业机械手伺服马达作为机器人的关键部件&#xff0c;确保机器人能够高效、稳定地运行。当出现IGM焊接机器人RTE 495伺服电机故障问题时&#xff0c;及时进行…

Android 文件传输

目录 device explorer 文件目录关系对应&#xff1a; device explorer 经常写adb命令传文件&#xff0c;结果发现Android studio有自带的文件管理器&#xff0c;可以上传下载文件。 tool windows ->device explorer 文件目录关系对应&#xff1a; Android java获取的程序…

【华为】路由综合实验(基础)

【华为】路由综合实验 实验需求拓扑配置AR1AR2AR3AR4AR5PC1PC2 查看通信OSPF邻居OSPF路由表 BGPBGP邻居BGP 路由表 配置文档 实验需求 ① 自行规划IP地址 ② 在区域1里面 启用OSPF ③ 在区域1和区域2 启用BGP&#xff0c;使AR4和AR3成为eBGP&#xff0c;AR4和AR5成为iBGP对等体…

Vitis HLS 学习笔记--S_AXILITE 寄存器及驱动

目录 1. 简介 2. S_AXILITE Registers 寄存器详解 2.1 “隐式”优势 2.2 驱动程序文件 2.3 硬件头文件 2.4 硬件头文件中 SC/COR/TOW/COH 的解释 2.5 驱动控制过程 3. 总结 1. 简介 回顾此博文《Vitis HLS 学习笔记--Syn Report解读&#xff08;1&#xff09;-CSDN博…

嘉楠堪智 CanMV K230 的 CanMV-IDE 环境与 MicroPython 编程

嘉楠推出了 CanMV IDE 开发环境&#xff0c;可以使用 MicroPython 开发针对 CanMV K230 的各种程序&#xff0c;同时也提供了大量的例子程序&#xff0c;方便使用者学习。 嘉楠开发者社区&#xff0c;给出了详细的 CanMV K230 教程&#xff0c;可以借以快速上手。 目录 固件…

商务谈判模拟口才训练方案(3篇)

商务谈判模拟口才训练方案&#xff08;3篇&#xff09; 商务谈判模拟口才训练方案&#xff08;一&#xff09; 一、训练目标 本训练方案旨在提高参与者在商务谈判中的口才表达能力&#xff0c;包括清晰表达、有效倾听、应对挑战和构建信任等能力。 二、训练内容 基础口才训练…

word启动缓慢之Baidu Netdisk Word Addin

word启动足足花了7秒钟&#xff0c;你知道我这7秒是怎么过来的吗&#xff1f; 原因就是我们可爱的百度网盘等APP&#xff0c;在我们安装客户端时&#xff0c;默认安装了Office加载项&#xff0c;不仅在菜单栏上加上了一个丑陋的字眼&#xff0c;也拖慢了word启动速度........ 解…

Python 语音识别系列-实战学习-语音识别特征提取

Python 语音识别系列-实战学习-语音识别特征提取 前言1.预加重、分帧和加窗2.提取特征3.可视化特征4.总结 前言 语音识别特征提取是语音处理中的一个重要环节&#xff0c;其主要任务是将连续的时域语音信号转换为连续的特征向量&#xff0c;以便于后续的语音识别和语音处理任务…

【开源设计】京东慢SQL组件:sql-analysis

京东慢SQL组件&#xff1a;sql-analysis 一、背景二、源码简析三、总结 地址&#xff1a;https://github.com/jd-opensource/sql-analysis 一、背景 开发中&#xff0c;无疑会遇到慢SQL问题&#xff0c;而常见的处理思路都是等上线&#xff0c;然后由监控报警之后再去定位对应…