android软件简约记账app开发day08-时间对话框的书写+改bug,改bug
android软件简约记账app开发day08-时间对话框的书写+改bug,改bug
绘制对话跨页面
在添加记账信息功能中,我提供了用户添加备注添加事件的功能,设计是点击时间会弹出一个时间对话框供用户选择时间,这里我们先绘制时间对话框,在layout中新建一个layout文件,命名为dialog_time,其中使用到了提供好了类DataPicker来展示日历效果,代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white">
<DatePicker
android:id="@+id/dialog_time_dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/please_input_time"
android:padding="10dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<EditText
android:id="@+id/dialog_time_et_hour"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:inputType="number"
android:maxLength="2"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" : "
android:textSize="20dp"
android:textStyle="bold"/>
<EditText
android:id="@+id/dialog_time_et_minute"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:inputType="number"
android:maxLength="2"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:orientation="horizontal">
<Button
android:id="@+id/dialog_time_btn_cancel"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="@string/cancel"
android:textColor="@color/white"
android:background="@null"
android:layout_marginRight="20dp"/>
<Button
android:id="@+id/dialog_time_btn_ensure"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="@string/ensure"
android:textColor="@color/white"
android:background="@null"
android:layout_marginRight="20dp"/>
</LinearLayout>
</LinearLayout>
效果图:
在页面绘制完成后,我们来书写java类来关联和管理该事件对话框
在util包下新建SelectTimeDialog类来关联该对话框,和之前一样,首先添加该页面上的所有控件
EditText hourEt,minuteEt;
DatePicker datePicker;
Button ensureBtn,cancelBtn;
在OnCerate方法中获取变量对象,并且添加OnClick方法为取消和确定添加单机事件,在点击了确定按钮后,我们要获取用户输入的时间,并做判断处理。其次在该方法中我也添加了隐藏时间对话框的头部的方法,因为该方法可能比较泛泛,所以我从网上找了一个,并且可以正常使用。
package com.open.tally.util;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import androidx.annotation.NonNull;
import com.open.tally.R;
/*
* 在记录页面弹出时间对话框
* */
public class SelectTimeDialog extends Dialog implements View.OnClickListener {
EditText hourEt,minuteEt;
DatePicker datePicker;
Button ensureBtn,cancelBtn;
public interface OnEnsureListener{
public void onEnsure(String time,int year,int month,int day);
}
OnEnsureListener onEnsureListener;
public void setOnEnsureListener(OnEnsureListener onEnsureListener) {
this.onEnsureListener = onEnsureListener;
}
public SelectTimeDialog(@NonNull Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_time);
hourEt = findViewById(R.id.dialog_time_et_hour);
minuteEt = findViewById(R.id.dialog_time_et_minute);
datePicker = findViewById(R.id.dialog_time_dp);
ensureBtn = findViewById(R.id.dialog_time_btn_ensure);
cancelBtn = findViewById(R.id.dialog_time_btn_cancel);
ensureBtn.setOnClickListener(this); //添加点击监听事件
cancelBtn.setOnClickListener(this);
hideDatePickerHeader();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dialog_time_btn_cancel:
cancel();
break;
case R.id.dialog_time_btn_ensure:
int year = datePicker.getYear(); //选择年份
int month = datePicker.getMonth()+1;
int dayOfMonth = datePicker.getDayOfMonth();
String monthStr = String.valueOf(month);
if (month<10){
monthStr = "0"+month;
}
String dayStr = String.valueOf(dayOfMonth);
if (dayOfMonth<10){
dayStr="0"+dayOfMonth;
}
// 获取输入的小时和分钟
String hourStr = hourEt.getText().toString();
String minuteStr = minuteEt.getText().toString();
int hour = 0;
if (!TextUtils.isEmpty(hourStr)) {
hour = Integer.parseInt(hourStr);
hour=hour%24;
}
int minute = 0;
if (!TextUtils.isEmpty(minuteStr)) {
minute = Integer.parseInt(minuteStr);
minute=minute%60;
}
hourStr=String.valueOf(hour);
minuteStr=String.valueOf(minute);
if (hour<10){
hourStr="0"+hour;
}
if (minute<10){
minuteStr="0"+minute;
}
String timeFormat = year+"年"+monthStr+"月"+dayStr+"日 "+hourStr+":"+minuteStr;
if (onEnsureListener!=null) {
onEnsureListener.onEnsure(timeFormat,year,month,dayOfMonth);
}
cancel();
break;
}
}
//隐藏DatePicker头布局
private void hideDatePickerHeader(){
ViewGroup rootView = (ViewGroup) datePicker.getChildAt(0);
if (rootView == null) {
return;
}
View headerView = rootView.getChildAt(0);
if (headerView == null) {
return;
}
//5.0+
int headerId = getContext().getResources().getIdentifier("day_picker_selector_layout", "id", "android");
if (headerId == headerView.getId()) {
headerView.setVisibility(View.GONE);
ViewGroup.LayoutParams layoutParamsRoot = rootView.getLayoutParams();
layoutParamsRoot.width = ViewGroup.LayoutParams.WRAP_CONTENT;
rootView.setLayoutParams(layoutParamsRoot);
ViewGroup animator = (ViewGroup) rootView.getChildAt(1);
ViewGroup.LayoutParams layoutParamsAnimator = animator.getLayoutParams();
layoutParamsAnimator.width = ViewGroup.LayoutParams.WRAP_CONTENT;
animator.setLayoutParams(layoutParamsAnimator);
View child = animator.getChildAt(0);
ViewGroup.LayoutParams layoutParamsChild = child.getLayoutParams();
layoutParamsChild.width = ViewGroup.LayoutParams.WRAP_CONTENT;
child.setLayoutParams(layoutParamsChild);
return;
}
// 6.0+
headerId = getContext().getResources().getIdentifier("date_picker_header","id","android");
if (headerId == headerView.getId()) {
headerView.setVisibility(View.GONE);
}
}
}
接下来组装时间对话框
在BaseRecordFragment类中添加showTimeDialog方法和之前的showBZDialog类似
private void showTimeDialog() {
SelectTimeDialog dialog = new SelectTimeDialog(getContext());
dialog.show();
//设定确定按钮被点击了的监听器
dialog.setOnEnsureListener(new SelectTimeDialog.OnEnsureListener() {
@Override
public void onEnsure(String time, int year, int month, int day) {
timeTv.setText(time);
accountBean.setTime(time);
accountBean.setYear(year);
accountBean.setMonth(month);
accountBean.setDay(day);
}
});
}
最后改bug,改bug
在完成如上操作后,我就立马进行了测试,可我惊奇的发现竟然添加不上记账信息,啊这。。。。。。。这可是我这项目的关键一步了啊,真乃行百里者半九十,我这快写完竟然添加不上,哎。。。。。。
首先我在添加数据的方法中写了一个日志
/*
* 向记账表当中插入一条元素
* */
public static void insertItemToAccounttb(AccountBean bean){
ContentValues values = new ContentValues();
values.put("typename",bean.getTypename());
values.put("sImageId",bean.getsImageId());
values.put("beizhu",bean.getBeizhu());
values.put("money",bean.getMoney());
values.put("time",bean.getTime());
values.put("year",bean.getYear());
values.put("month",bean.getMonth());
values.put("day",bean.getDay());
values.put("kind",bean.getKind());
db.insert("accounttb",null,values);
Log.i("open1314", "insertItemToAccounttb: okkk");
}
我进行测试,竟然不输出日志信息,哎,也是,要输出了还添加不上那才见鬼了呢
之后我又分别再baserecordfragment类上的create、init方法上打上日志,他输出,然后我又再子类上打日志,他也输出,这就纳闷了啊,这哪里哪里都又日志,可就为什么添加不上呢,我又试了试好多办法,什么换虚拟机呀,重启项目啊,卸载重装啊等等方法,还是不行,我又默默的打开了baserecordfragment类,又分析了一边,再init方法中,我设置了一个监听器来获取用户输入的账目金额,当初写的时候,加了一个判断用户没有输入或输入为空的情况,这种情况就直接返回,不在设置金额,这逻辑也没错啊,我在if里打了一个日志,他竟然输出了,竟然输出了,这不应该呀,进入if中,就直接return掉了,不应该啊,这我一看,哎,if判断条件我写成
if (!TextUtils.isEmpty(moneyStr) || moneyStr.equals("0")) {
getActivity().finish();
return;
}
哎,不仔细看还真看不出来,应该没有!号,这都能写错,哎,简直了。
行了,今天又是改bug的一天。
android软件简约记账app开发day08-时间对话框的书写+改bug,改bug的更多相关文章
- android软件简约记账app开发day03-自定义键盘的书写
android软件简约记账app开发day03-自定义键盘的书写 我们在fragment界面使用了自定义的keybroad键盘,所以今天我们来书写自定义的键盘代码 新建util包,新建keyboard ...
- android软件简约记账app开发day09-主页面模块,收支记账信息的展示
android软件简约记账app开发day09-主页面模块,收支记账信息的展示 我们第一天已经绘制了记账条目的界面,也在主界面设置了LietView来展示记账条目,今天来实现记账后再主界面的展示效果 ...
- android软件简约记账app开发day05-记账页面条目代码优化和bug解决
android软件简约记账app开发day05-记账页面条目代码优化和bug解决 今天还是因为该bug又极大的耽误了项目进程,该开发文档都要没有时间来写了. 先说bug吧,在昨天已经实现了页面图标的展 ...
- android软件简约记账app开发day04-记账页面条目的代码书写
android软件简约记账app开发day04-记账页面条目的代码书写 在前三天我们完成了基本的界面展示,从今天开始,我们进入到后台逻辑代码的编写中,今天开发记账条目的代码 我们在主页面点击记一笔图标 ...
- android软件简约记账app开发day10-主页面模块--头信息的展示,和之后功能完善的目标。
android软件简约记账app开发day10-主页面模块--头信息的展示,和之后功能完善的目标. 今天来写主界面头信息的展示,也就是将第一天的写的layout中的item_main_top展示到主界 ...
- android软件简约记账app开发day07-备注界面完善
android软件简约记账app开发day07-备注界面完善 ## 昨天我们已经绘制了备注页面,今天来用Java代码组装完善一下. 首先我们新建BeiZhuDialog类关联备注页面,并且实现点击接口 ...
- android软件简约记账app开发day06-将记账条目添加到数据库并且绘制备注页面
android软件简约记账app开发day06-将记账条目添加到数据库并且绘制备注页面 首先写添加到数据库 在DBOpenHelper中添加创建记账表的语句 //创建记账表 sql = "c ...
- android软件简约记账app开发day02-收入支出明细页面绘制
android软件简约记账app开发day02-收入支出明细页面绘制 效果图 列表界面绘制 新建layout文件-item_mainlv.xml大体使用绝对布局,嵌套相对布局,嵌套文本内容实现 < ...
- android软件简约记账app开发day01-今日收支明细的界面绘制
android软件简约记账app开发day01-今日收支明细的界面绘制 导入素材 导入在阿里iconfront图标库下载的字体图标分为大小两种,分别导入到项目目录mipmap-hdpi和mipmap- ...
随机推荐
- redis不重启,切换到RDB备份到AOF备份
redis不重启,切换RDB备份到AOF备份 确保redis版本在2.2以上 查看redis版本 redis-server -v 实验环境准备 本文是在redis4.0中,通过config set命令 ...
- 4月10日 python学习总结 模块和面向对象
1.hashlib 1.什么叫hash:hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值 2.hash值的特点是:2.1 只要传入的内容一样,得到的hash值必然一样=====& ...
- Go语言- import 导入包的语法
一 包的导入语法 在go语言中一个包(文件夹)中可以包含多个 go 文件,每一个文件通过文件第一行的 package 来指明自己所在的包,原则上应该与自己所在的文件夹同名,但也可以指定为其他名称,但同 ...
- xx局点FusionCloud6.3 type1 计算配额失败问题
现象: 排查过程: 1.登录云平台部署面,选择部署资源-服务器 2.找到MOC-ManageOne-Service01.MOC-ManageOne-Service02两台机器ip地址. 3.用ssh工 ...
- Badger简单使用
Badger简介 badger 是 dgraph 开源的 LSMTree 的 KV 引擎,它相比 leveldb 有 KV 分离.事务.并发合并等增强,是 go 生态中比较生产级的存储引擎了. 文档: ...
- 22.1.22 并查集和KMP算法
22.1.22 并查集和KMP算法 1.并查集结构 1)实现: 并查集有多种实现方式,例如向上指的图的方式,数组的方式等等.其根本思想就在于准确记录某个节点的根节点,这个这种记录就能够很快的实现并查集 ...
- dfs:x+y=z
#include <iostream.h> int a[100]; static int stat=0; void dfs(int n) { if(n==3) { if(a[0]+a[1] ...
- @Bean和@Componet区别
无意在两个类上看到了这两个注解,一个使用了@Bean配合@Configuration,一个使用了@Componet.依稀记得这两个注解都是实现以前在xml中<bean xxx/>的功能,但 ...
- AutoValue —— Generated immutable value classes
本文参考 在<Effective Java>第三版第十条"Obey the general contract when overriding equals"中提到goo ...
- Leetcode刷题之螺旋矩阵
矩阵之螺旋矩阵 总体思路: 注意遍历顺序 每次遍历一圈时候不要多加元素 Leetcode54螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. ...