上次实现了更多表单中的应用详情和设置(清除全部记录)的功能,接下来实现第三个功能,查看账单记录。
和往常相同,首先制作页面布局
android:layout_
android:orientation="vertical"
android:background="@color/grey_f3f3f3">
android:layout_>
android:layout_
android:layout_
android:src="@mipmap/it_back"
android:layout_marginLeft="10dp"
android:OnClick="onClick"/>
android:layout_
android:text="@string/history_record"
android:text
android:textSize="18sp"
android:layout_centerInParent="true"/>
android:layout_
android:layout_
android:layout_marginRight="10dp"
android:src="@mipmap/it_rili"
android:layout_alignParentRight="true"
android:OnClick="onClick"/>
android:layout_
android:padding="10dp">
android:layout_
android:layout_
android:text="2021年10月"/>
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:textColor="@color/green_006400"
android:text="@string/history_info"/>
android:layout_
android:layout_
android:divider="@null"
android:divider
android:padding="10dp" />
在这个页面中有两个点击事件,一个是返回的点击事件,直接finish()即可,另一个是查看不同时间的记录。
首先实现该页面的显示,首先在DBManger中定义一个方法,搜索数据库中的数据,并进行显示。
/* 数据库的操作完成之后,进行页面的操作,首先在HistoryActivity中定义基本的变量。 @Override 适配器 package com.example.bookeep.adaptor; 将这些写完之后,在页面中获取数据库中的数据,并将其显示出来。 //获取指定年份月份收支情况的列表 做完这些之后,为保证细节的完整,还要保证其能够,长按删除和实时刷新功能 //设置listView的长安事件 做完这个之后,接下来是做另一个onClick事件,作为一个日历,首先必须获取时间,然后能够点击不同的时间。 首先来做一个时间框布局 做完这些之后,在HistoryActivity中获取日历 final CalendarDialog dialog = new CalendarDialog(this,dialogSelPos,dialogSelMonth); 最后使用switch语句将这两个点击事件关联,这个账单记录的功能就基本实现了。 今天就实现这一个功能,我认为获取数据库的数据是最重要的,其次是页面的布局和数据的显示,最后在做日立的点击事件的时候,需要注意必须使其能够停止在上次选中的位置,可以再设置两个关于时间和月份的变量。 明天实现账单详情功能 之后,这个记账小软件就基本完成了。明天需要绘制柱状图,柱状图比较难绘制。
* 获取记账表中某一月所有支出或收入情况
* */
public static List
List
String sql="select * from accounttb where year =? and mOnth=? order by id desc";
Cursor cursor = db.rawQuery(sql,new String[]{year+"",month+""});
//遍历符合要求的每一行数据
while(cursor.moveToNext()){
int id = cursor.getInt(cursor.getColumnIndex("id"));
String typename=cursor.getString(cursor.getColumnIndex("typename"));
String beizhu=cursor.getString(cursor.getColumnIndex("beizhu"));
String time = cursor.getString(cursor.getColumnIndex("time"));
int simageId=cursor.getInt(cursor.getColumnIndex("simageId"));
int kind=cursor.getInt(cursor.getColumnIndex("kind"));
float mOney= cursor.getFloat(cursor.getColumnIndex("money"));
int day = cursor.getInt(cursor.getColumnIndex("day"));
AccountBean accountBean = new AccountBean(id,typename,simageId,beizhu,money,time,year,month,day,kind);
list.add(accountBean);
}
return list;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history);
historyLv = findViewById(R.id.history_lv);
timeTv = findViewById(R.id.history_tv_time);
mDatas = new ArrayList<>();
//设置适配器
adapter = new AccountAdapter(this,mDatas);
historyLv.setAdapter(adapter);
initTime();
timeTv.setText(year+"年"+month+"月");
loadData(year,month);
setLVClickListener();
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.bookeep.R;
import com.example.bookeep.db.AccountBean;
import java.util.Calendar;
import java.util.List;
public class AccountAdapter extends BaseAdapter {
Context context;
List
LayoutInflater inflater;
int year,month,day;
public AccountAdapter(Context context, List
this.cOntext= context;
this.mDatas = mDatas;
inflater=LayoutInflater.from(context);
Calendar calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
mOnth=calendar.get(Calendar.MONTH)+1;
day=calendar.get(Calendar.DAY_OF_MONTH);
}
@Override
public int getCount() {
return mDatas.size();
}
@Override
public Object getItem(int i) {
return mDatas.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder = null;
if(view==null){
view=inflater.inflate(R.layout.item_mainlv,viewGroup,false);
holder=new ViewHolder(view);
view.setTag(holder);
}else {
holder= (ViewHolder) view.getTag();
}
AccountBean bean = mDatas.get(i);
holder.typeIv.setImageResource(bean.getSimageId());
holder.typeTv.setText(bean.getTypename());
holder.beizhuTv.setText(bean.getBeizhu());
holder.moneyTv.setText("¥"+bean.getMoney());
if(bean.getYear()==year && bean.getMonth()==month && bean.getDay()==day){
String time = bean.getTime().split(" ")[0];
holder.timeTv.setText("今天"+time);
}else {
holder.timeTv.setText(bean.getTime());
}
return view;
}
class ViewHolder{
ImageView typeIv;
TextView typeTv,beizhuTv,timeTv,moneyTv;
public ViewHolder(View view){
typeIv=view.findViewById(R.id.item_mainlv_iv);
typeTv=view.findViewById(R.id.item_mainlv_tv_title);
timeTv=view.findViewById(R.id.item_mainlv_tv_time);
beizhuTv=view.findViewById(R.id.item_mainlv_tv_beizhu);
mOneyTv=view.findViewById(R.id.item_mainlv_tv_money);
}
}
}
private void loadData(int year,int month) {
List
mDatas.clear();
mDatas.addAll(list);
adapter.notifyDataSetChanged();
}
private void setLVClickListener() {
historyLv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView> adapterView, View view, int i, long l) {
AccountBean accountBean = mDatas.get(i);
deleteItem(accountBean);
return false;
}
});
}
private void deleteItem(final AccountBean accountBean) {
final int delId = accountBean.getId();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示信息").setMessage("你确定要删除这条记录吗?")
.setNegativeButton("取消",null)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
DBManger.deleteItemFromAccounttbById(delId);
mDatas.remove(accountBean);//实时刷新
adapter.notifyDataSetChanged();
}
});
builder.create().show();
}
android:layout_>
android:layout_
android:layout_
android:text="2020"
android:background="@drawable/dialog_btn_bg"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="8dp"
android:layout_margin="5dp"/>
android:layout_
android:padding="5dp">
android:layout_
android:layout_
android:text="2021/1"
android:padding="8dp"
android:gravity="center"
android:background="@color/grey_f3f3f3"
android:textColor="@color/black"/>
dialog.show();
dialog.setDialogSize();
dialog.setOnRefreshListener(new CalendarDialog.OnRefreshListener() {
@Override
public void onRefresh(int selPos, int year, int month) {
timeTv.setText(year+"年"+month+"月");
loadData(year,month);
dialogSelPos = selPos;
dialogSelMOnth=month;
}
});