我们现在已经讲完了数据库操作,适配器操作和页面跳转操作,现在我们来处理页面跳转之后的逻辑
我们这个家庭记账本主要实现了基本的增删改查功能,这里我们先从增加入手:还记得我们在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的日期选择器,这里给出常见的一些属性:
-
android:datePickerMode
: 这个属性用于指定日期选择器的模式。可以选择的值有spinner
(下拉框模式)和calendar
(日历模式)。 -
android:calendarViewShown
: 这个属性用于指定是否显示日历视图。设置为true
将显示日历视图,设置为false
将只显示月份和年份的下拉框。 -
android:minDate
和android:maxDate
: 这两个属性用于限制用户可选的日期范围。可以将它们设置为特定的日期,以确保用户只能在指定的范围内选择日期。 -
android:spinnersShown
: 这个属性用于指定是否显示下拉框选择器(仅在datePickerMode
设置为calendar
时有效)。如果设置为false
,则仅显示一个日历视图。 -
android:layoutMode
: 这个属性用于指定布局模式,可以选择的值有normal
(普通模式,即默认的 DatePicker 样式)和dialog
(对话框模式,会以对话框的形式显示 DatePicker)。 -
android:headerBackground
: 这个属性用于设置日期选择器的标题栏背景。 -
android:headerTextColor
: 这个属性用于设置标题栏文字的颜色。 -
android:calendarTextColor
: 这个属性用于设置日历中日期的文字颜色。
具体代码示例可以看这篇链接:https://cloud.tencent.com/developer/article/2294188?areaSource=102001.9&traceId=FN7I7qNgKBn06STjEUNre
现在我们返回到页面的逻辑文件当中,initView方法实例化了一个dbhelper对象用于实现数据库相关的操作,然后是通过id将对应的金额标题输入框和日期选择器绑定到变量当中方便后续的操作;
然后是一个简单的goback的点击函数,直接通过finish方法返回到主界面;
最后是一个确认按钮的点击函数,用于将用户输入的数据进行存储,我们这里使用字符串将前文获取到的变量进行提取,将日期选择器以年月日进行拆分,然后有一个简单的判断逻辑,确保用户输入了金额,这里有一个Toast消息框,它可以在一个小型弹出式窗口中提供与操作有关的简单反馈。它只会填充消息所需的空间大小,并且当前 activity 会一直显示及供用户与之互动。超时后,消息框会自动消失。这里给出常用的方法:
-
makeText(Context context, CharSequence text, int duration)
: 静态方法,用于创建一个 Toast 对象,指定上下文、消息内容和持续时间。 -
show()
: 显示 Toast 消息。 -
cancel()
: 取消正在显示的 Toast 消息。 -
setView(View view)
: 设置 Toast 显示的自定义视图。 -
setDuration(int duration)
: 设置 Toast 显示的持续时间。 -
setGravity(int gravity, int xOffset, int yOffset)
: 设置 Toast 显示的位置和偏移量。 -
setText(CharSequence text)
: 设置 Toast 显示的文本内容。 -
getView()
: 获取当前 Toast 显示的视图。 -
getDuration()
: 获取当前 Toast 显示的持续时间。 -
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