收入支出界面的逻辑编写
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/15757763.html
package com.example.easycash; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; import android.os.Bundle; import android.view.View; import com.google.android.material.tabs.TabLayout; import com.example.easycash.adapter.RecordPagerAdapter; import com.example.easycash.frag_record.IncomeFragment; import com.example.easycash.frag_record.BaseRecordFragment; import com.example.easycash.frag_record.OutcomeFragment; import java.util.ArrayList; import java.util.List; public class RecordActivity extends AppCompatActivity { TabLayout tabLayout; ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_record); //1.查找控件 tabLayout = findViewById(R.id.record_tabs); viewPager = findViewById(R.id.record_vp); //2.设置ViewPager加载页面 initPager(); } private void initPager() { // 初始化ViewPager页面的集合 List<Fragment>fragmentList = new ArrayList<>(); // 创建收入和支出页面,放置在Fragment当中 OutcomeFragment outFrag = new OutcomeFragment(); //支出 IncomeFragment inFrag = new IncomeFragment(); //收入 fragmentList.add(outFrag); fragmentList.add(inFrag); // 创建适配器 RecordPagerAdapter pagerAdapter = new RecordPagerAdapter(getSupportFragmentManager(), fragmentList); // 设置适配器 viewPager.setAdapter(pagerAdapter); //将TabLayout和ViwePager进行关联 tabLayout.setupWithViewPager(viewPager); } /* 点击事件*/ public void onClick(View view) { switch (view.getId()) { case R.id.record_iv_back: finish(); break; } } }
RecordPagerAdapter.java文件
package com.example.easycash.adapter; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; import java.util.List; public class RecordPagerAdapter extends FragmentPagerAdapter { List<Fragment>fragmentList; String[]titles = {"支出","收入"}; public RecordPagerAdapter(@NonNull FragmentManager fm,List<Fragment>fragmentList) { super(fm); this.fragmentList = fragmentList; } @NonNull @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } @Nullable @Override public CharSequence getPageTitle(int position) { return titles[position]; } }
MainActivity.java
package com.example.easycash; import androidx.appcompat.app.AppCompatActivity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; import android.view.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.example.easycash.adapter.AccountAdapter; import com.example.easycash.db.AccountBean; import com.example.easycash.db.DBManager; import com.example.easycash.utils.BudgetDialog; import com.example.easycash.utils.MoreDialog; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Set; public class MainActivity extends AppCompatActivity implements View.OnClickListener { ListView todayLv; //展示今日收支情况的ListView ImageView searchIv; Button editBtn; ImageButton moreBtn; //声明数据源 List<AccountBean>mDatas; AccountAdapter adapter; int year,month,day; //头布局相关控件 View headerView; TextView topOutTv,topInTv,topbudgetTv,topConTv; ImageView topShowIv; SharedPreferences preferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initTime(); initView(); preferences = getSharedPreferences("budget", Context.MODE_PRIVATE); //添加ListView的头布局 addLVHeaderView(); mDatas = new ArrayList<>(); //设置适配器:加载每一行数据到列表当中 adapter = new AccountAdapter(this, mDatas); todayLv.setAdapter(adapter); } /** 初始化自带的View的方法*/ private void initView() { todayLv = findViewById(R.id.main_lv); editBtn = findViewById(R.id.main_btn_edit); moreBtn = findViewById(R.id.main_btn_more); searchIv = findViewById(R.id.main_iv_search); editBtn.setOnClickListener(this); moreBtn.setOnClickListener(this); searchIv.setOnClickListener(this); setLVLongClickListener(); } /** 设置ListView的长按事件*/ private void setLVLongClickListener() { todayLv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { if (position == 0) { //点击了头布局 return false; } int pos = position-1; AccountBean clickBean = mDatas.get(pos); //获取正在被点击的这条信息 //弹出提示用户是否删除的对话框 showDeleteItemDialog(clickBean); return false; } }); } /* 弹出是否删除某一条记录的对话框*/ private void showDeleteItemDialog(final AccountBean clickBean) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("提示信息").setMessage("您确定要删除这条记录么?") .setNegativeButton("取消",null) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { int click_id = clickBean.getId(); //执行删除的操作 DBManager.deleteItemFromAccounttbById(click_id); mDatas.remove(clickBean); //实时刷新,移除集合当中的对象 adapter.notifyDataSetChanged(); //提示适配器更新数据 setTopTvShow(); //改变头布局TextView显示的内容 } }); builder.create().show(); //显示对话框 } /** 给ListView添加头布局的方法*/ private void addLVHeaderView() { //将布局转换成View对象 headerView = getLayoutInflater().inflate(R.layout.item_mainlv_top, null); todayLv.addHeaderView(headerView); //查找头布局可用控件 topOutTv = headerView.findViewById(R.id.item_mainlv_top_tv_out); topInTv = headerView.findViewById(R.id.item_mainlv_top_tv_in); topbudgetTv = headerView.findViewById(R.id.item_mainlv_top_tv_budget); topConTv = headerView.findViewById(R.id.item_mainlv_top_tv_day); topShowIv = headerView.findViewById(R.id.item_mainlv_top_iv_hide); topbudgetTv.setOnClickListener(this); headerView.setOnClickListener(this); topShowIv.setOnClickListener(this); } /* 获取今日的具体时间*/ private void initTime() { Calendar calendar = Calendar.getInstance(); year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH)+1; day = calendar.get(Calendar.DAY_OF_MONTH); } // 当activity获取焦点时,会调用的方法 @Override protected void onResume() { super.onResume(); loadDBData(); setTopTvShow(); } /* 设置头布局当中文本内容的显示*/ private void setTopTvShow() { //获取今日支出和收入总金额,显示在view当中 float incomeOneDay = DBManager.getSumMoneyOneDay(year, month, day, 1); float outcomeOneDay = DBManager.getSumMoneyOneDay(year, month, day, 0); String infoOneDay = "今日支出 ¥"+outcomeOneDay+" 收入 ¥"+incomeOneDay; topConTv.setText(infoOneDay); // 获取本月收入和支出总金额 float incomeOneMonth = DBManager.getSumMoneyOneMonth(year, month, 1); float outcomeOneMonth = DBManager.getSumMoneyOneMonth(year, month, 0); topInTv.setText("¥"+incomeOneMonth); topOutTv.setText("¥"+outcomeOneMonth); // 设置显示运算剩余 float bmoney = preferences.getFloat("bmoney", 0);//预算 if (bmoney == 0) { topbudgetTv.setText("¥ 0"); }else{ float syMoney = bmoney-outcomeOneMonth; topbudgetTv.setText("¥"+syMoney); } } // 加载数据库数据 private void loadDBData() { List<AccountBean> list = DBManager.getAccountListOneDayFromAccounttb(year, month, day); mDatas.clear(); mDatas.addAll(list); adapter.notifyDataSetChanged(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.main_iv_search: Intent it = new Intent(this, SearchActivity.class); //跳转界面 startActivity(it); break; case R.id.main_btn_edit: Intent it1 = new Intent(this, RecordActivity.class); //跳转界面 startActivity(it1); break; case R.id.main_btn_more: MoreDialog moreDialog = new MoreDialog(this); moreDialog.show(); moreDialog.setDialogSize(); break; case R.id.item_mainlv_top_tv_budget: showBudgetDialog(); break; case R.id.item_mainlv_top_iv_hide: // 切换TextView明文和密文 toggleShow(); break; } if (v == headerView) { //头布局被点击了 Intent intent = new Intent(); intent.setClass(this, MonthChartActivity.class); startActivity(intent); } } /** 显示运算设置对话框*/ private void showBudgetDialog() { BudgetDialog dialog = new BudgetDialog(this); dialog.show(); dialog.setDialogSize(); dialog.setOnEnsureListener(new BudgetDialog.OnEnsureListener() { @Override public void onEnsure(float money) { //将预算金额写入到共享参数当中,进行存储 SharedPreferences.Editor editor = preferences.edit(); editor.putFloat("bmoney",money); editor.commit(); //计算剩余金额 float outcomeOneMonth = DBManager.getSumMoneyOneMonth(year, month, 0); float syMoney = money-outcomeOneMonth;//预算剩余 = 预算-支出 topbudgetTv.setText("¥"+syMoney); } }); } boolean isShow = true; /** * 点击头布局眼睛时,如果原来是明文,就加密,如果是密文,就显示出来 * */ private void toggleShow() { if (isShow) { //明文====》密文 PasswordTransformationMethod passwordMethod = PasswordTransformationMethod.getInstance(); topInTv.setTransformationMethod(passwordMethod); //设置隐藏 topOutTv.setTransformationMethod(passwordMethod); //设置隐藏 topbudgetTv.setTransformationMethod(passwordMethod); //设置隐藏 topShowIv.setImageResource(R.mipmap.ih_hide); isShow = false; //设置标志位为隐藏状态 }else{ //密文---》明文 HideReturnsTransformationMethod hideMethod = HideReturnsTransformationMethod.getInstance(); topInTv.setTransformationMethod(hideMethod); //设置隐藏 topOutTv.setTransformationMethod(hideMethod); //设置隐藏 topbudgetTv.setTransformationMethod(hideMethod); //设置隐藏 topShowIv.setImageResource(R.mipmap.ih_show); isShow = true; //设置标志位为隐藏状态 } } }
package com.example.easycash.frag_record; import androidx.fragment.app.Fragment; import com.example.easycash.R; import com.example.easycash.db.DBManager; import com.example.easycash.db.TypeBean; import java.util.List; /** * A simple {@link Fragment} subclass. */ public class OutcomeFragment extends BaseRecordFragment { // 重写 @Override public void loadDataToGV() { super.loadDataToGV(); //获取数据库当中的数据源 List<TypeBean> outlist = DBManager.getTypeList(0); typeList.addAll(outlist); adapter.notifyDataSetChanged(); typeTv.setText("其他"); typeIv.setImageResource(R.mipmap.ic_qita_fs); } @Override public void saveAccountToDB() { accountBean.setKind(0); DBManager.insertItemToAccounttb(accountBean); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」