首页 > 其他分享 >Android家庭记账本开发第六天:添加功能的设计

Android家庭记账本开发第六天:添加功能的设计

时间:2024-02-21 19:13:15浏览次数:38  
标签:Toast toast 第六天 cost 记账 import new Android android

我们现在已经讲完了数据库操作,适配器操作和页面跳转操作,现在我们来处理页面跳转之后的逻辑

我们这个家庭记账本主要实现了基本的增删改查功能,这里我们先从增加入手:还记得我们在activity_main当中我们在布局中有一个增加按钮并为其设定了一个点击函数

  android:onClick="addAccount" 我们也在MainActivity当中设置了那个点击函数
1   public void addAccount(View view){//跳转
2         Intent intent=new Intent(MainActivity.this,new_cost.class);
3         startActivityForResult(intent,1);
4     }

在之前的MainActivity的讲解当中我们已经介绍过了这个方法的简单的跳转逻辑,现在我们来看new_cost的代码,跳转之后的方法是什么样的:

 1 package com.example.myapplication3;
 2 
 3 import android.content.ContentValues;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.os.Bundle;
 6 import android.view.Gravity;
 7 import android.view.View;
 8 import android.widget.DatePicker;
 9 import android.widget.EditText;
10 import android.widget.Toast;
11 
12 import androidx.appcompat.app.AppCompatActivity;
13 
14 public class new_cost extends AppCompatActivity {
15     private DBHelper helper;
16     private EditText et_cost_title;
17     private EditText et_cost_money;
18     private DatePicker dp_cost_date;
19 
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         setContentView(R.layout.activity_new_cost);
24         initView();
25     }
26 
27     private void initView() {
28         helper = new DBHelper(new_cost.this);
29         et_cost_title = findViewById(R.id.et_cost_title);
30         et_cost_money = findViewById(R.id.et_cost_money);
31         dp_cost_date = findViewById(R.id.dp_cost_date);
32 
33     }
34     public void goback(View view){
35         finish();
36     }
37 
38     public void okButton(View view) {
39         String titleStr = et_cost_title.getText().toString().trim();
40         String moneyStr = et_cost_money.getText().toString().trim();
41         String dateStr = dp_cost_date.getYear() + "-" + (dp_cost_date.getMonth() + 1) + "-"
42                 + dp_cost_date.getDayOfMonth();//这里getMonth会比当前月份少一个月,所以要+1
43         if ("".equals(moneyStr)) {//可以不填写Title但是不能不填金额
44             Toast toast = Toast.makeText(this, "请填写金额", Toast.LENGTH_SHORT);
45             toast.setGravity(Gravity.CENTER, 0, 0);
46             toast.show();
47         } else {
48             SQLiteDatabase db = helper.getWritableDatabase();
49             ContentValues values = new ContentValues();
50             values.put("Title", titleStr);
51             values.put("Money", moneyStr);
52             values.put("Date", dateStr);
53             long account = db.insert("account", null, values);
54             if (account > 0) {
55                 Toast toast = Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT);
56                 toast.setGravity(Gravity.CENTER, 0, 0);
57                 toast.show();
58                 setResult(1);
59                 finish();
60             } else {
61                 Toast toast = Toast.makeText(this, "请重试", Toast.LENGTH_SHORT);
62                 toast.setGravity(Gravity.CENTER, 0, 0);
63                 toast.show();
64                 db.close();
65             }
66             setResult(1);
67             finish();
68         }
69 
70     }
71 }

首先这个方法也是一个activity所以也要继承自AppCompatActivity

同样程序也会进行onCreate的初始化,这里我们可以看到主要的逻辑和MainActivity当中的逻辑基本一致,通过创建好的xml文件进行页面的布局,这里给出activity_new_cost的代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical"
 7     android:gravity="center">
 8 
 9     <EditText
10         android:id="@+id/et_cost_title"
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content"
13         android:layout_margin="4dp"
14         android:hint="Cost Title"
15         android:textColor="#ffbd27"
16         />
17 
18     <EditText
19         android:id="@+id/et_cost_money"
20         android:inputType="number|numberDecimal"
21         android:layout_width="match_parent"
22         android:layout_height="wrap_content"
23         android:layout_margin="4dp"
24         android:hint="Cost Money"
25         android:textColor="#ffbd27"
26         />
27 
28     <DatePicker
29         android:id="@+id/dp_cost_date"
30         android:layout_width="wrap_content"
31         android:layout_height="wrap_content"
32         android:layout_margin="8dp"
33         android:datePickerMode="spinner"
34         android:calendarViewShown="false"
35         />
36 
37     <Button
38         android:layout_width="match_parent"
39         android:layout_height="wrap_content"
40         android:layout_marginLeft="40dp"
41         android:layout_marginRight="40dp"
42         android:background="#00BCD4"
43         android:onClick="okButton"
44         android:text="确认"
45         android:textColor="#333333"
46         android:textSize="20dp" />
47     <Button
48         android:onClick="goback"
49         android:layout_width="match_parent"
50         android:layout_height="wrap_content"
51         android:layout_marginLeft="40dp"
52         android:layout_marginRight="40dp"
53         android:layout_marginTop="20dp"
54         android:background="#00BCD4"
55         android:text="返回"
56         android:textColor="#333333"
57         android:textSize="20dp" />
58 </LinearLayout>

关于布局文件之前的主界面布局中也讲了很多,这里只是新增了一个DataPicker的日期选择器,这里给出常见的一些属性:

  1. android:datePickerMode: 这个属性用于指定日期选择器的模式。可以选择的值有 spinner(下拉框模式)和 calendar(日历模式)。

  2. android:calendarViewShown: 这个属性用于指定是否显示日历视图。设置为 true 将显示日历视图,设置为 false 将只显示月份和年份的下拉框。

  3. android:minDateandroid:maxDate: 这两个属性用于限制用户可选的日期范围。可以将它们设置为特定的日期,以确保用户只能在指定的范围内选择日期。

  4. android:spinnersShown: 这个属性用于指定是否显示下拉框选择器(仅在 datePickerMode 设置为 calendar 时有效)。如果设置为 false,则仅显示一个日历视图。

  5. android:layoutMode: 这个属性用于指定布局模式,可以选择的值有 normal(普通模式,即默认的 DatePicker 样式)和 dialog(对话框模式,会以对话框的形式显示 DatePicker)。

  6. android:headerBackground: 这个属性用于设置日期选择器的标题栏背景。

  7. android:headerTextColor: 这个属性用于设置标题栏文字的颜色。

  8. android:calendarTextColor: 这个属性用于设置日历中日期的文字颜色。

具体代码示例可以看这篇链接:https://cloud.tencent.com/developer/article/2294188?areaSource=102001.9&traceId=FN7I7qNgKBn06STjEUNre

 

现在我们返回到页面的逻辑文件当中,initView方法实例化了一个dbhelper对象用于实现数据库相关的操作,然后是通过id将对应的金额标题输入框和日期选择器绑定到变量当中方便后续的操作;

然后是一个简单的goback的点击函数,直接通过finish方法返回到主界面;

最后是一个确认按钮的点击函数,用于将用户输入的数据进行存储,我们这里使用字符串将前文获取到的变量进行提取,将日期选择器以年月日进行拆分,然后有一个简单的判断逻辑,确保用户输入了金额,这里有一个Toast消息框,它可以在一个小型弹出式窗口中提供与操作有关的简单反馈。它只会填充消息所需的空间大小,并且当前 activity 会一直显示及供用户与之互动。超时后,消息框会自动消失。这里给出常用的方法:

  1. makeText(Context context, CharSequence text, int duration): 静态方法,用于创建一个 Toast 对象,指定上下文、消息内容和持续时间。

  2. show(): 显示 Toast 消息。

  3. cancel(): 取消正在显示的 Toast 消息。

  4. setView(View view): 设置 Toast 显示的自定义视图。

  5. setDuration(int duration): 设置 Toast 显示的持续时间。

  6. setGravity(int gravity, int xOffset, int yOffset): 设置 Toast 显示的位置和偏移量。

  7. setText(CharSequence text): 设置 Toast 显示的文本内容。

  8. getView(): 获取当前 Toast 显示的视图。

  9. getDuration(): 获取当前 Toast 显示的持续时间。

  10. getGravity(): 获取当前 Toast 显示的位置。

Toast还可以进行自定义显示,具体的一些操作代码我也没有找到比较好的,网上搜搜看吧

下面就是进行数据库的存储操作了,通过helper获取一个可写的数据库,然后新建一个ContentValues对象,ContentValues 是 Android 开发中用于存储数据库表中一行数据的键值对的类。它通常用于执行数据库的插入(insert)和更新(update)操作,是在操作数据库时传递数据的一种方便的方式。我们只需要知道它是键值对存储的即可。之后就是将数据进行插入了,通过调用insert方法进行插入,这里给出参数解释:

  • account:要插入数据的目标表的名称。
  • nullColumnHack:可选参数,用于指定当 values 参数为空时,插入的默认空值列。通常设置为 null
  • values:包含要插入的数据的 ContentValues 对象。

insert() 方法返回一个长整型(long)值,表示插入操作的结果。如果插入成功,则返回新插入行的行号(row ID),即自动生成的主键值;如果插入失败,则返回 -1。我们在下面进行插入操作是否成功的判断,弹出相应的提示信息,最后将结果返回就好。

这个添加页面的逻辑就已经完成了,之后我们会进行查找页面的讲解

标签:Toast,toast,第六天,cost,记账,import,new,Android,android
From: https://www.cnblogs.com/qmz-znv2/p/18026020

相关文章

  • andorid开发--记账本(六)
    完成了记录支出页面的逻辑编写此时项目结构adapter适配器包RecordPagerAdapter.javapackagecom.example.myapplication.adapter;importandroidx.annotation.NonNull;importandroidx.annotation.Nullable;importandroidx.fragment.app.Fragment;importandroidx.fra......
  • Android家庭记账本开发第五天:ListAdapter适配器的编写
    昨天讲了数据库相关的操作现在来看我们当初在MainActivity的Java文件当中的initData方法:1@SuppressLint("Range")2privatevoidinitData(){3helper=newDBHelper(MainActivity.this);4list=newArrayList<>();5SQLiteDatabasedb=h......
  • Android 《ViewPager 实现引导页》
    布局文件activity_launch_simple.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xm......
  • Android 《ViewPagerStrip》简单应用
    布局文件activity_pager_tab_strip.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"......
  • Android命令-lshal
    一、lahal--help翻译/#lshal--helplshal:列出并调试HIDLHAL。(对于AIDLHAL,请参阅“dumpsys”)commands:list列出HIDLHAL。debug调试指定的HIDLHAL。help打印帮助消息。wait如果HIDLHAL尚未启动,请等待其启动。如果未指定命令,则默认为“l......
  • Android 《ViewPager》简单应用
    布局文件<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://sche......
  • Kotlin学习, 新手向,变量总汇,基于《第一行代码Android(第三版)》
    作者做的思维导图变量val和var区别valvalue不可变变量varvariable可变变量变量的自动类型推导(弱)vala=10;print("a="+a);变量的显式声明(强)vala:Int=10;数据类型注意和java不同,这些都是对象数据类型,大写开头:IntShortLongFloatDoubleB......
  • 第一行代码 Android(第3版)PDF下载
    《第一行代码Android第3版》被Android开发者誉为“Android学习第一书”。全书系统全面、循序渐进地介绍了Android软件开发的必备知识、经验和技巧。《第一行代码Android第3版》基于Android10.0对第2版进行了全面更新,不仅将所有知识点都在Android10.0系统上进行了重新适配,同......
  • andorid开发--记账本(五)
    软键盘的绘制以及逻辑编写在res包下创建一个xml文件夹,创立一个key.xml<?xmlversion="1.0"encoding="utf-8"?><Keyboardxmlns:android="http://schemas.android.com/apk/res/android"android:keyHeight="50dp"android:keyWidth="......
  • 记账本程序开发笔记3:模块设计和框架搭建
    在记账本程序中,可以设计以下模块和框架:       结构体AccountItem:表示记账项,包括itemType(收入或支出)、amount(金额)和detail(说明)。loadDataFromFile函数:从文件加载记账项数据到vector<AccountItem> 中。accounting函数:记账主函数,根据用户输入的操作调......