Android-用两个activity实现少女心爆棚的便签(xutil框架实现)

2024-02-23 15:40

本文主要是介绍Android-用两个activity实现少女心爆棚的便签(xutil框架实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先上图看效果,由于不能上传视频,多图预警,支持增,删,改,查,搜索。由于篇幅有限,有些xml文件不能上传,想要整个工程可以进行下载,或者私信俺。如果不会xutil数据库操作,可以先进行学习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里只贴出,java代码
首先得添加框架依赖

   implementation 'com.facebook.stetho:stetho:1.5.1'implementation 'org.xutils:xutils:3.8.5'implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.2'  //1.0.5及以前版本的老用户升级需谨慎,API改动过大implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.2'  //没有使用特殊Header,可以不加这行

在这里插入图片描述
第一个activity.java代码


import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.telephony.CellSignalStrength;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;import com.facebook.stetho.Stetho;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;import org.xutils.DbManager;
import org.xutils.db.Selector;
import org.xutils.ex.DbException;
import org.xutils.x;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;public class MainActivity extends AppCompatActivity {static DbManager.DaoConfig daoConfig;//用来增加数据使用,表示idstatic int nums;//用来表示是新建还是修改static boolean flag=true;//切换布局static boolean flagRecycle=true;static MyAdapter myAdapter;static List<Messages> users;static List<Messages> userstemp;static RecyclerView recyclerView;Messages messages;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Stetho.initializeWithDefaults(this);x.Ext.init(getApplication());x.Ext.setDebug(BuildConfig.DEBUG);// 是否输出debug日志, 开启debug会影响性能.x.view().inject(this);//没有用到view注解可以先不用final EditText editText=findViewById(R.id.editText2);//数据库创建daoConfig= new DbManager.DaoConfig().setDbName("messages.db")// 不设置dbDir时, 默认存储在app的私有目录.// .setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单, 先这样写了..setDbVersion(1).setDbOpenListener(new DbManager.DbOpenListener() {@Overridepublic void onDbOpened(DbManager db) {// 开启WAL, 对写入加速提升巨大db.getDatabase().enableWriteAheadLogging();}}).setDbUpgradeListener(new DbManager.DbUpgradeListener() {@Overridepublic void onUpgrade(DbManager db, int oldVersion, int newVersion) {// TODO: ...// db.addColumn(...);// db.dropTable(...);// ...// or// db.dropDb();}});
//查询所有的数据,并显示到recycleviewDbManager db = null;try {// 删除1db = x.getDb(daoConfig);users= new ArrayList<>();users= db.selector(Messages.class).orderBy("id", true).limit(1000).findAll();
// users= db.selector(User.class).orderBy("id", true).limit(1000).findAll();
// users= db.selector(User.class).findAll();nums=users.size();} catch (DbException e) {e.printStackTrace();return;}//            搜索Button button=findViewById(R.id.button6);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {EditText seachEdit=findViewById(R.id.editText);String seachContent=seachEdit.getText().toString();DbManager db = null;try {// 删除1db = x.getDb(daoConfig);List<Messages> newMessge = new ArrayList<>();String sql="select * from Messages where content like "+"'%"+seachContent+"%'";Cursor cursor= db.execQuery(sql);while (cursor.moveToNext()){Messages m=new Messages();String seachmess=cursor.getString(1);m.setContent(seachmess);String seachdate=cursor.getString(2);m.setDate(seachdate);int seachid=cursor.getInt(0);m.setId(seachid);newMessge.add(m);Log.i("hhhh", "onClick: sousuo"+m.getContent()+" "+m.getDate()+" "+seachContent);}cursor.close();
//                        newMessge=db.selector(Messages.class).orderBy("id", true).where("content","like","%"+seachContent+"%").findAll();users=newMessge;myAdapter.notifyDataSetChanged();seachEdit.setText("");// users= db.selector(User.class).orderBy("id", true).limit(1000).findAll();
// users= db.selector(User.class).findAll();} catch (DbException e) {e.printStackTrace();return;}}});//    跳转到编写页面Button button2 =findViewById(R.id.button2);button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {flag=false;Intent intent=new Intent(MainActivity.this,Main2Activity.class);startActivity(intent);Log.i("hhhhh", "onClick: ");}});myAdapter = new MyAdapter();recyclerView =findViewById(R.id.recyclerView);recyclerView.setAdapter(myAdapter);
//设置边距HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION,30);//top间距stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION,50);//底部间距stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION,50);//左间距stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION,50);//右间距recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));//            刷新RefreshLayout refreshLayout = findViewById(R.id.refreshLayout);refreshLayout.setOnRefreshListener(new OnRefreshListener() {@Overridepublic void onRefresh(RefreshLayout refreshlayout) {DbManager db = null;try {// 删除1db = x.getDb(daoConfig);users= new ArrayList<>();users= db.selector(Messages.class).orderBy("id", true).limit(1000).findAll();
// users= db.selector(User.class).orderBy("id", true).limit(1000).findAll();
// users= db.selector(User.class).findAll();nums=users.size();} catch (DbException e) {e.printStackTrace();return;}myAdapter.notifyDataSetChanged();refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败}});refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {@Overridepublic void onLoadMore(RefreshLayout refreshlayout) {myAdapter.notifyDataSetChanged();refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败}});//            切换布局Button button4=findViewById(R.id.button4);button4.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (flagRecycle) {//如果为真,代表线性布局,设置为网格布局flagRecycle=false;recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this, 2, LinearLayoutManager.VERTICAL, false));}else {flagRecycle=true;recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));}}});}public  class MyViewHolder extends  RecyclerView.ViewHolder{//用来包装每个子项的布局信息public TextView textView1;public TextView textView2;public MyViewHolder(@NonNull View itemView) {super(itemView);textView1=itemView.findViewById(R.id.textView1);textView2=itemView.findViewById(R.id.textView2);}}public  class  MyAdapter extends RecyclerView.Adapter<MyViewHolder>{//用来配合recycleview进行加载子项以及填充子项的数据@Overridepublic MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, final int viewType) {final View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item1,parent,false);final MyViewHolder myViewHolder = new MyViewHolder(view);
//设置子项item监听myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {
//                        Messages user=new Messages();
                        user.setId();Intent intent=new Intent(MainActivity.this,Main2Activity.class);int id=myViewHolder.getAdapterPosition();//得到item的编号,位置
//                        String date=users.get(id).getDate();
//                        String content=users.get(id).getContent();
//跳转页面并实现传递参数intent.putExtra("mess",id);
//                        Log.i("hhhh", "onClick: "+id+"  "+users.get(id).getContent());startActivity(intent);}});//              设置监听
//                view.setOnClickListener(new View.OnClickListener() {
//                    @Override
//                    public void onClick(View v) {
                        Messages user=new Messages();
                        user.setId();
//                        Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                        intent.putExtra("user",users.get())
//                        Log.i("hhhh", "onClick: "+view.getTag());
//                        startActivity(intent);
//                    }
//                });return myViewHolder;}@Overridepublic void onBindViewHolder(@NonNull MyViewHolder holder, int position) {//在这里进行子项的文本图片数据填充holder.textView1.setText(users.get(position).getContent());holder.textView2.setText(users.get(position).getDate());}@Overridepublic int getItemCount() {//返回子项的数目,即加载多少列表项return users.size();}}}

第二个activity.java代码

import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;import com.facebook.stetho.Stetho;import org.xutils.DbManager;
import org.xutils.common.util.KeyValue;
import org.xutils.db.sqlite.WhereBuilder;
import org.xutils.ex.DbException;
import org.xutils.x;import java.text.SimpleDateFormat;
import java.util.Date;import static com.c201801020217.tangbo.MainActivity.daoConfig;
import static com.c201801020217.tangbo.MainActivity.flag;
import static com.c201801020217.tangbo.MainActivity.myAdapter;
import static com.c201801020217.tangbo.MainActivity.nums;
import static com.c201801020217.tangbo.MainActivity.users;public class Main2Activity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);Stetho.initializeWithDefaults(this);
//        返回final Button button=findViewById(R.id.button);
//        保存Button button2=findViewById(R.id.button7);
//        删除final Button button3=findViewById(R.id.button5);final TextView textViewDate=findViewById(R.id.textView);final TextView textContent=findViewById(R.id.editText2);SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// HH:mm:ss
//获取当前时间Date date = new Date(System.currentTimeMillis());final String time= simpleDateFormat.format(date);textViewDate.setText(time);
//        Messages messages= (Messages) getIntent().getSerializableExtra("mess");final int id = getIntent().getIntExtra("mess", 0);final int itemid = users.get(id).getId();if(flag) {String dates = users.get(id).getDate();String content = users.get(id).getContent();textViewDate.setText(dates);textContent.setText(content);}//        保存button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {DbManager db = null;try {if (flag) {//如果为真,代表是点击item进来的,要用更新语句而不是插入语句
//条件更新String newcontent=textContent.getText().toString();db = x.getDb(daoConfig);db.update(Messages.class, WhereBuilder.b("id", "=", itemid),
// WhereBuilder.b("id", "=", 1).and("isAdmin", "=", true).,new KeyValue("content",newcontent), new KeyValue("date", time));users.get(id).setDate(time);users.get(id).setContent(newcontent);} else {db = x.getDb(daoConfig);Messages user = new Messages();//new 一个对象,相当于是表中的一行,相当于一条记录//相当于插入数据user.setId(nums + 1);nums++;user.setDate(time);user.setContent(textContent.getText().toString());db.save(user);//写入数据,保存到数据库flag=true;users.add(user);
//                       myAdapter.notifyDataSetChanged();}finish();} catch (DbException e) {e.printStackTrace();return;}}});
//        删除button3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//条件删除DbManager db = null;try {db = x.getDb(daoConfig);db.delete(Messages.class,WhereBuilder.b("id", "=", itemid));users.remove(id);} catch (DbException e) {e.printStackTrace();return;}finish();}});
//返回button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}
}

数据库使用的java类

import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;import java.util.Date;@Table(name = "Messages")
public class Messages {@Column(name = "id",isId=true)private int id;@Column(name = "date")private String date;@Column(name = "content")private String content;public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public int getId() {return id;}public void setId(int id) {this.id = id;}
}

这篇关于Android-用两个activity实现少女心爆棚的便签(xutil框架实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/739112

相关文章

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

golang版本升级如何实现

《golang版本升级如何实现》:本文主要介绍golang版本升级如何实现问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录golanwww.chinasem.cng版本升级linux上golang版本升级删除golang旧版本安装golang最新版本总结gola

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU