首页 > 其他分享 >Android家庭记账本开发第三天:MainActivity主界面逻辑文件

Android家庭记账本开发第三天:MainActivity主界面逻辑文件

时间:2024-02-18 15:44:07浏览次数:23  
标签:cursor 逻辑文件 void MainActivity Intent Activity import Android onCreate

昨天讲了主界面的xml文件的布局,这里讲一下对应的主界面的Java文件,首先上代码:

  1 package com.example.myapplication3;
  2 
  3 import android.annotation.SuppressLint;
  4 import android.content.Intent;
  5 import android.database.Cursor;
  6 import android.database.sqlite.SQLiteDatabase;
  7 import android.os.Bundle;
  8 import android.util.Log;
  9 import android.view.View;
 10 import android.widget.ImageButton;
 11 import android.widget.ListView;
 12 
 13 import androidx.annotation.Nullable;
 14 import androidx.appcompat.app.AppCompatActivity;
 15 
 16 import java.util.ArrayList;
 17 import java.util.List;
 18 public class MainActivity extends AppCompatActivity implements ListAdapter.OnItemClickListener{
 19 
 20     private DBHelper helper;
 21     private  ListView listView;
 22     private  ImageButton Add;
 23     private  ImageButton search;
 24     private List<costList>list;
 25 
 26     @Override
 27     protected void onCreate(Bundle savedInstanceState) {
 28         super.onCreate(savedInstanceState);
 29         setContentView(R.layout.activity_main);
 30         initView();
 31         initData();
 32     }
 33     //初始化
 34     @SuppressLint("Range")
 35     private void initData() {
 36         helper=new DBHelper(MainActivity.this);
 37         list=new ArrayList<>();
 38         SQLiteDatabase db=helper.getReadableDatabase();
 39         Cursor cursor=db.query("account",null,null,null,null,
 40                 null,null);
 41         while (cursor.moveToNext()){
 42             costList clist=new costList();//构造实例
 43             clist.set_id(cursor.getInt(cursor.getColumnIndex("_id")));
 44             clist.setTitle(cursor.getString(cursor.getColumnIndex("Title")));
 45             clist.setDate(cursor.getString(cursor.getColumnIndex("Date")));
 46             clist.setMoney(cursor.getString(cursor.getColumnIndex("Money")));
 47             list.add(clist);
 48         }
 49         listView = findViewById(R.id.list_view);
 50         //绑定适配器
 51         ListAdapter mAdapter = new ListAdapter(this,list);
 52         mAdapter.setOnItemClickListener(this);
 53         listView.setAdapter(mAdapter);
 54         db.close();
 55     }
 56     @Override
 57     public void onItemClick(int position) {
 58         // 处理点击事件的逻辑
 59         Log.d("Main", "jump");
 60         costList item = list.get(position);
 61         Intent intent = new Intent(MainActivity.this, upgrade_cost.class);
 62         intent.putExtra("item_id", item.get_id());
 63         startActivityForResult(intent, 1);
 64     }
 65 
 66     private void initView() {
 67         Add=findViewById(R.id.add);
 68         search=findViewById(R.id.search);
 69     }
 70 
 71 
 72 
 73     //事件:添加
 74     public void addAccount(View view){//跳转
 75         Intent intent=new Intent(MainActivity.this,new_cost.class);
 76         startActivityForResult(intent,1);
 77     }
 78     public void searchAccount(View view){
 79         Intent intent=new Intent(MainActivity.this,search_cost.class);
 80         startActivityForResult(intent,2);
 81     }
 82 
 83     @Override
 84     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
 85         super.onActivityResult(requestCode, resultCode, data);
 86         if(requestCode==1&&resultCode==1)
 87         {
 88             this.initData();
 89         }
 90         if(requestCode==2&&resultCode==2){
 91             // 获取选择的日期数据
 92             String selectedDate = null;
 93             if (data != null) {
 94                 selectedDate = data.getStringExtra("selected_date");
 95                 // 根据选择的日期从数据库中检索相关账单数据并显示在主界面上
 96                 showBillsForSelectedDate(selectedDate);
 97             }
 98         }
 99     }
100 
101     private void showBillsForSelectedDate(String selectedDate) {
102         // 根据选择的日期从数据库中检索相关账单数据
103         List<costList> billList = helper.getBillsForDate(selectedDate); // 假设 DBHelper 中有一个方法可以根据日期检索相关账单数据
104 
105         // 使用适配器将账单数据绑定到 ListView 上
106         ListAdapter adapter = new ListAdapter(this, billList);
107         listView.setAdapter(adapter);
108     }
109 
110     public void refresh(View view) {
111         initView();
112         initData();
113     }
114 }

首先我们可以看到出去一些变量的声明,mainactivity主要先重写了一个onCreate函数,这里有必要说一下acivity的生命周期:

 

 

 

onCreate():Activity启动后第一个被调用的函数,常用来进行Activity的初始化,如创建View,绑定数据和恢复数据。

onStart():当Activity显示在屏幕上时,函数被调用。

onRestart():Activity从停止状态进入活动状态是调用。

onResume():Activity可以接受用户输入时,该函数被调用,此时的activity位于activity栈的栈顶。

onPause():当Activity进入暂停状态时,该函数被调用,一般用来保存持久的数据或释放占用的资源。

onStop():当Activity变为不可见后,该函数被调用,Activity进入停止状态。

onDestroy():在Activity被终止前,被调用。


这里看一下onCreate函数

onCreate()函数:用于activity初始化的时候。一般情况下,我们需在onCreate()中调用setContentView(int)函数填充屏幕的UI,通过findViewById(int)返回.xml文件中定义的视图或组件的ID。子类在重写onCreate()方法的时候必须调用父类的onCreate()方法,即super.onCreate(),否则会抛出异常。 我们在onCreate函数中调用了initData和initView函数用于实现布局的初始化,其中initData涉及到数据库操作和适配器填充数据,我们先不用了解之后会再介绍。

这里我们主要看一下在初始化之后还有着哪些操作,初始化之后可以看到对于其他功能的实现都有着一个用于实现跳转的startActivityForResult(Intent,int)方法,该方法是一种用于在 Android 应用程序中启动另一个活动(Activity)并期望在被启动的活动完成后接收结果的机制。

我们在增加按钮和查询按钮还有列表项都有着跳转的方法,同时在下文中还有着对应的处理返回结果的方法onActivityResult负责处理返回的状态码并执行对应的操作。

 

在startActivityForResult(Intent,int)方法中,我们可以看到有一个参数为Intent对象,安卓 Intent 是一种在 Android 应用程序之间传递信息的机制。它可以用于启动活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver),以及传递数据和操作等。这里给上一个简单介绍的链接 https://blog.csdn.net/m0_51947109/article/details/130466463

在使用该方法的时候可能会提示该方法已废弃,解决方案是使用 startActivityForResult(Intent, int, Bundle) 方法来代替。该方法允许你向要启动的活动传递附加数据。通过将 Bundle 对象作为第三个参数传递,你可以在发送给活动的 Intent 中包含额外的数据。

Bundle 的作用主要时用于传递数据;它所保存的数据是以key-value(键值对)的形式存在的,也就是说bundle是保存数据的容器,内部使用了Arraymap去存储数据,也提供了很多get,put方法。
  bundle传递的数据包括:string、int、boolean、byte、float、long、double等基本类型或它们对应的数组,也可以是对象或对象数组。当bundle传递的是对象或对象数组时,必须实现Serialiable或Parcelable接口。
  bundle主要用于以下3个场合:
  1. Activity状态数据的保存与恢复,涉及到两个回调:①void onSaveInstanceState(Bundle outState);② void onCreate(Bundle savedInstanceState);
  2. Fragment的setArguments方法:void setArgument(Bundle args);
  3. 消息机制中的Message的setData方法:void setData(Bundle data)。 这里附上链接:https://www.jianshu.com/p/0a50acfbf268

利用该函数我们就可以在各个activity当中实现跳转,剩余的showBillsForSelectedData函数用于在查询时显示对应的数据

今天先介绍到这里,之后会介绍一下android的sqlite数据库的一些操作

标签:cursor,逻辑文件,void,MainActivity,Intent,Activity,import,Android,onCreate
From: https://www.cnblogs.com/qmz-znv2/p/18019405

相关文章

  • Android家庭记账本开发第二天:activity_main布局文件
    本次开发记录是在开发完成之后记录的,所以能写几篇我也不知道,可能没有十篇,将这次的开发记录作为一次知识点复习的机会。开发完成之后的目录如下安卓开发相较于之前进行的Javaweb开发难度要高上不少,因为之前的都是通过tomcat服务器去运行,我们只需要将对应的页面完善好就行,但是安......
  • Android家庭记账本开发第一天:Android studio与gradle安装
    首先记录一下Androidstudio与gradle的安装,工具相较于IDEA和pycharm安装过程很麻烦。官网地址:https://developer.android.google.cn/studio?hl=zh-cn本次安装示例在虚拟机中运行首先在官网中点击下载,得到安装程序,双击打开这里会选择安装位置,自己选择一个安装位置即可,我这里......
  • ## AndroidStudio安装和环境配置
    利用网盘资源,下载所需的sdk和AndroidStudio链接:https://pan.baidu.com/s/1d-7jRWhHwBU8DaustdJvVA提取码:8xec第一步:新建一个androidstudio,在这个文件夹下新建sdk,studio,work,第二步,运行安装包,在资料里面。点击next默认全选,点击next点击IAgree下一步直到安装到你新......
  • Android 未root时 文件的selinux权限和日志查看办法
     getenforce 获取当前SELinux状态cas:/$getenforceEnforcingdmesg可以查看日志,但是没有root权限不能用,会显示cas:/$dmesgdmesg:klogctl:Permissiondeniedhttps://android.stackexchange.com/questions/218223/how-to-fix-dmesg-klogctl-permission-denied-for-nor......
  • Android Studio实现TabLayout
    通过AS实现TabLayout的效果记录如下:完成了TabLayout布局完成了Activity向Fragment传输数据完成了Fragment监听数据变化实时更新数据其效果图如下:首先,先创建一个Activity,创建Java与xml布局文件(此处不做上述UI,只做简单的TabLayout)DevInformationActivity.javapublicclas......
  • 【踩坑】Unity Android(安卓)平台 Render texture 有残留,即使调用 DiscardContents 还
    在编辑器环境下OK,打包成PC客户端也OK,但是打包成apk,在安卓手机上运行的时候就会有残留。 我的代码如下。主要是在LateUpdate()中,修改特定摄像机的cullmask,在捕捉到制定的rendertexture上(即此处的m_levelUnitRT)。 voidLateUpdate(){if(m_levelU......
  • Android系统版本号对照表
    Android系统版本号对照表 系统名称系统版本号字母Android1434UAndroid1333TAndroid12L32SAndroid1231SAndroid1130RAndroid1029QAndroid928PieAndroid8.127OreoAndroid8.026OreoAndroid7.1......
  • Android Studio 只启动安卓模拟器的脚本实现
    基本上都是参考:https://blog.csdn.net/qq_39970857/article/details/122186784一.找到SDK安装路径这俩张懒得画图,是偷的)二.win+r打开cmd(反正不用管理权限,随便怎么打开)......
  • pixel2 Android11 Https 抓包记录
    关键词:pixel2Android11MagiskhttpcanaryHttps最近需要抓HTTPS,手里设备有pixel2,4,6都是高版本。查找了下资料,配置环境,记录下。前置条件1.设备一台已Root,Magisk方案需要物料:1.winadb环境。参见:https://www.cnblogs.com/myred/p/14506909.html2.winopenssl环境。......
  • Android Graphics 多屏同显/异显 - 新年预告
    春节将至,首先祝愿朋友们新年快乐!AndroidGraphics多屏同显/异显-新年预告 -- 点我阅读节前发布最后一篇文章,预告下阶段将要分享的研究成果,主要是Android多屏同显/异显的一些知识。为了能讲清楚底层逻辑,又不要惑于上层复杂的AMS/WMS,特意写作了C++版本的多屏互动的演示......