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

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、