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使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin