Android 开发Day10
这是main里面的所有代码,按版本修改过
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hui.tally"> <application android:name=".UniteApp" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MonthChartActivity"></activity> <activity android:name=".SettingActivity" /> <activity android:name=".HistoryActivity" /> <activity android:name=".AboutActivity" /> <activity android:name=".SearchActivity" /> <activity android:name=".RecordActivity" /> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
package com.hui.tally; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; public class AboutActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); } public void onClick(View view) { finish(); } }
package com.hui.tally; import androidx.appcompat.app.AppCompatActivity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import com.hui.tally.adapter.AccountAdapter; import com.hui.tally.db.AccountBean; import com.hui.tally.db.DBManager; import com.hui.tally.utils.CalendarDialog; import java.util.ArrayList; import java.util.Calendar; import java.util.List; public class HistoryActivity extends AppCompatActivity { ListView historyLv; TextView timeTv; List<AccountBean>mDatas; AccountAdapter adapter; int year,month; int dialogSelPos = -1; int dialogSelMonth = -1; @Override 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(); } /*设置ListView每一个item的长按事件*/ private void setLVClickListener() { historyLv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { AccountBean accountBean = mDatas.get(position); 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 dialog, int which) { DBManager.deleteItemFromAccounttbById(delId); mDatas.remove(accountBean); //实时刷新,从数据源删除 adapter.notifyDataSetChanged(); } }); builder.create().show(); } /* 获取指定年份月份收支情况的列表*/ private void loadData(int year,int month) { List<AccountBean> list = DBManager.getAccountListOneMonthFromAccounttb(year, month); mDatas.clear(); mDatas.addAll(list); adapter.notifyDataSetChanged(); } private void initTime() { Calendar calendar = Calendar.getInstance(); year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH)+1; } public void onClick(View view) { switch (view.getId()) { case R.id.history_iv_back: finish(); break; case R.id.history_iv_rili: CalendarDialog dialog = new CalendarDialog(this,dialogSelPos,dialogSelMonth); 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; } }); break; } } }
package com.hui.tally; 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.hui.tally.adapter.AccountAdapter; import com.hui.tally.db.AccountBean; import com.hui.tally.db.DBManager; import com.hui.tally.utils.BudgetDialog; import com.hui.tally.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.hui.tally; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.hui.tally.adapter.ChartVPAdapter; import com.hui.tally.db.DBManager; import com.hui.tally.frag_chart.IncomChartFragment; import com.hui.tally.frag_chart.OutcomChartFragment; import com.hui.tally.utils.CalendarDialog; import java.util.ArrayList; import java.util.Calendar; import java.util.List; public class MonthChartActivity extends AppCompatActivity { Button inBtn,outBtn; TextView dateTv,inTv,outTv; ViewPager chartVp; int year; int month; int selectPos = -1,selectMonth =-1; List<Fragment>chartFragList; private IncomChartFragment incomChartFragment; private OutcomChartFragment outcomChartFragment; private ChartVPAdapter chartVPAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_month_chart); initView(); initTime(); initStatistics(year,month); initFrag(); setVPSelectListener(); } private void setVPSelectListener() { chartVp.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){ @Override public void onPageSelected(int position) { setButtonStyle(position); } }); } private void initFrag() { chartFragList = new ArrayList<>(); // 添加Fragment的对象 incomChartFragment = new IncomChartFragment(); outcomChartFragment = new OutcomChartFragment(); // 添加数据到Fragment当中 Bundle bundle = new Bundle(); bundle.putInt("year",year); bundle.putInt("month",month); incomChartFragment.setArguments(bundle); outcomChartFragment.setArguments(bundle); // 将Fragment添加到数据源当中 chartFragList.add(outcomChartFragment); chartFragList.add(incomChartFragment); // 使用适配器 chartVPAdapter = new ChartVPAdapter(getSupportFragmentManager(), chartFragList); chartVp.setAdapter(chartVPAdapter); // 将Fragment加载到Acitivy当中 } /* 统计某年某月的收支情况数据*/ private void initStatistics(int year, int month) { float inMoneyOneMonth = DBManager.getSumMoneyOneMonth(year, month, 1); //收入总钱数 float outMoneyOneMonth = DBManager.getSumMoneyOneMonth(year, month, 0); //支出总钱数 int incountItemOneMonth = DBManager.getCountItemOneMonth(year, month, 1); //收入多少笔 int outcountItemOneMonth = DBManager.getCountItemOneMonth(year, month, 0); //支出多少笔 dateTv.setText(year+"年"+month+"月账单"); inTv.setText("共"+incountItemOneMonth+"笔收入, ¥ "+inMoneyOneMonth); outTv.setText("共"+outcountItemOneMonth+"笔支出, ¥ "+outMoneyOneMonth); } /** 初始化时间的方法*/ private void initTime() { Calendar calendar = Calendar.getInstance(); year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH)+1; } /** 初始化控件*/ private void initView() { inBtn = findViewById(R.id.chart_btn_in); outBtn = findViewById(R.id.chart_btn_out); dateTv = findViewById(R.id.chart_tv_date); inTv = findViewById(R.id.chart_tv_in); outTv = findViewById(R.id.chart_tv_out); chartVp = findViewById(R.id.chart_vp); } public void onClick(View view) { switch (view.getId()) { case R.id.chart_iv_back: finish(); break; case R.id.chart_iv_rili: showCalendarDialog(); break; case R.id.chart_btn_in: setButtonStyle(1); chartVp.setCurrentItem(1); break; case R.id.chart_btn_out: setButtonStyle(0); chartVp.setCurrentItem(0); break; } } /* 显示日历对话框*/ private void showCalendarDialog() { CalendarDialog dialog = new CalendarDialog(this, selectPos, selectMonth); dialog.show(); dialog.setDialogSize(); dialog.setOnRefreshListener(new CalendarDialog.OnRefreshListener() { @Override public void onRefresh(int selPos, int year, int month) { MonthChartActivity.this.selectPos = selPos; MonthChartActivity.this.selectMonth = month; initStatistics(year,month); incomChartFragment.setDate(year,month); outcomChartFragment.setDate(year,month); } }); } /* 设置按钮样式的改变 支出-0 收入-1*/ private void setButtonStyle(int kind){ if (kind == 0) { outBtn.setBackgroundResource(R.drawable.main_recordbtn_bg); outBtn.setTextColor(Color.WHITE); inBtn.setBackgroundResource(R.drawable.dialog_btn_bg); inBtn.setTextColor(Color.BLACK); }else if (kind == 1){ inBtn.setBackgroundResource(R.drawable.main_recordbtn_bg); inBtn.setTextColor(Color.WHITE); outBtn.setBackgroundResource(R.drawable.dialog_btn_bg); outBtn.setTextColor(Color.BLACK); } } }
package com.hui.tally; 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.hui.tally.adapter.RecordPagerAdapter; import com.hui.tally.frag_record.IncomeFragment; import com.hui.tally.frag_record.BaseRecordFragment; import com.hui.tally.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; } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | package com.hui.tally; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.hui.tally.adapter.AccountAdapter; import com.hui.tally.db.AccountBean; import com.hui.tally.db.DBManager; import java.util.ArrayList; import java.util.List; public class SearchActivity extends AppCompatActivity { ListView searchLv; EditText searchEt; TextView emptyTv; List<AccountBean>mDatas; //数据源 AccountAdapter adapter; //适配器对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); initView(); mDatas = new ArrayList<>(); adapter = new AccountAdapter( this ,mDatas); searchLv.setAdapter(adapter); searchLv.setEmptyView(emptyTv); //设置无数局时,显示的控件 } private void initView() { searchEt = findViewById(R.id.search_et); searchLv = findViewById(R.id.search_lv); emptyTv = findViewById(R.id.search_tv_empty); } public void onClick(View view) { switch (view.getId()) { case R.id.search_iv_back: finish(); break ; case R.id.search_iv_sh: //执行搜索的操作 String msg = searchEt.getText().toString().trim(); // 判断输入内容是否为空,如果为空,就提示不能搜索 if (TextUtils.isEmpty(msg)) { Toast.makeText( this , "输入内容不能为空!" ,Toast.LENGTH_SHORT).show(); return ; } //开始搜索 List<AccountBean> list = DBManager.getAccountListByRemarkFromAccounttb(msg); mDatas.clear(); mDatas.addAll(list); adapter.notifyDataSetChanged(); break ; } } } |
package com.hui.tally; import androidx.appcompat.app.AppCompatActivity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.hui.tally.db.DBManager; public class SettingActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting); } public void onClick(View view) { switch (view.getId()) { case R.id.setting_iv_back: finish(); break; case R.id.setting_tv_clear: showDeleteDialog(); break; } } private void showDeleteDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("删除提示") .setMessage("您确定要删除所有记录么?\n注意:删除后无法恢复,请慎重选择!") .setPositiveButton("取消",null) .setNegativeButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DBManager.deleteAllAccount(); Toast.makeText(SettingActivity.this,"删除成功!",Toast.LENGTH_SHORT).show(); } }); builder.create().show(); } }
package com.hui.tally; import android.app.Application; import com.hui.tally.db.DBManager; /* 表示全局应用的类*/ public class UniteApp extends Application { @Override public void onCreate() { super.onCreate(); // 初始化数据库 DBManager.initDB(getApplicationContext()); } }
基本所有的代码都在里面了,图片什么的未展示
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2023-05-24 多项式之和