任务:完善数据库的操作以及主页面的数据刷新。
package net.hnjdzy.tinyaccount.entity; /** * 类别 * @author androiddev@163.com,hnjdzy */ public class AccountCategory { private int id; private String category; private int icon; public AccountCategory(int id, String category, int icon) { this.id = id; this.category = category; this.icon = icon; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public int getIcon() { return icon; } public void setIcon(int icon) { this.icon = icon; } @Override public String toString() { return category; } }
package net.hnjdzy.tinyaccount.entity; /** * 实体类 * @author Administrator * */ public class AccountItem implements java.io.Serializable{ private int id; //类别 private String category; //备注 private String remark; //金额 private double money; //日期 private String date; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public AccountItem(int id, String category, String remark, double money, String date) { super(); this.id = id; this.category = category; this.remark = remark; this.money = money; this.date = date; } public AccountItem(){ } @Override public String toString() { return this.category + " " + this.date + " " + this.money; } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/imageViewCategory" android:layout_width="36dp" android:layout_height="36dp" android:layout_weight="1" android:layout_marginTop="2dp" app:srcCompat="@drawable/book_icon" /> <TextView android:id="@+id/textViewCategory" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="TextView" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_margin="10dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="5dp" > <TextView android:id="@+id/textViewIncomeDesc" android:text="收入汇总" android:gravity="center" android:paddingBottom="10dp" android:textSize="12sp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerInParent="true"/> <TextView android:id="@+id/textViewIncomeSummary" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="10dp" android:text="¥0" android:textSize="12sp" android:layout_below="@+id/textViewIncomeDesc"/> <Button android:id="@+id/buttonAdd" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="#FF8833" android:text="+" /> </RelativeLayout> <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".fragment.OutlayFragment"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="5dp" > <TextView android:id="@+id/textViewIncomeDesc" android:text="消费汇总" android:gravity="center" android:paddingBottom="10dp" android:textSize="12sp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerInParent="true"/> <TextView android:id="@+id/textViewIncomeSummary" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="10dp" android:text="¥0" android:textSize="12sp" android:layout_below="@+id/textViewIncomeDesc"/> <Button android:id="@+id/buttonAdd" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="@drawable/button_shape" android:text="+" /> </RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerVertical="true" android:layout_centerHorizontal="true"/> </LinearLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_selected_name" android:text="账户余额" android:gravity="center" android:textSize="12sp" android:padding="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/textViewSummary" android:text="¥0" android:gravity="center" android:paddingBottom="10dp" android:textSize="12sp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/tv_selected_name"/> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textViewCategory" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="19dp" android:layout_marginTop="14dp" android:text="类别" /> <TextView android:id="@+id/textViewRemark" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textViewCategory" android:layout_alignLeft="@+id/textViewCategory" android:layout_marginLeft="120dp" android:layout_marginTop="26dp" android:text="备注" /> <TextView android:id="@+id/textViewMoney" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/textViewCategory" android:layout_alignBottom="@+id/textViewCategory" android:layout_alignParentRight="true" android:layout_marginRight="16dp" android:text="500" android:textColor="@android:color/holo_red_light" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/textViewDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/textViewRemark" android:layout_alignBottom="@+id/textViewRemark" android:layout_alignRight="@+id/textViewMoney" android:textColor="@android:color/darker_gray" android:text="2017-11-28" /> <ImageView android:id="@+id/imageViewIcon" android:layout_width="36dp" android:layout_height="36dp" android:layout_below="@+id/textViewCategory" android:layout_alignStart="@+id/textViewCategory" android:layout_marginStart="0dp" android:layout_marginTop="5dp" app:srcCompat="@drawable/baby_icon" /> </RelativeLayout>
package net.hnjdzy.tinyaccount.fragment; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import net.hnjdzy.tinyaccount.R; import net.hnjdzy.tinyaccount.activity.AccountEditActivity; import net.hnjdzy.tinyaccount.adapter.AccountItemAdapter; import net.hnjdzy.tinyaccount.db.AccountDao; import net.hnjdzy.tinyaccount.entity.AccountItem; import android.widget.AdapterView.OnItemLongClickListener; import java.util.ArrayList; import java.util.List; /** * 收入列表 * @author androiddev@163.com,hnjdzy */ public class IncomeFragment extends Fragment { View mRootView; public IncomeFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment mRootView = inflater.inflate(R.layout.fragment_income, container, false); initView(); return mRootView; } // 初始化 private void initView() { Button buttonAdd = (Button)mRootView.findViewById(R.id.buttonAdd); buttonAdd.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { buttonAddOnClick(); } }); ListView listView = (ListView)mRootView.findViewById(R.id.listView1); listView.setOnItemLongClickListener(new OnItemLongClickListener(){ @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { deleteItem(id); return true; } }); refreshData(); } protected void buttonAddOnClick() { Intent intent =new Intent(this.getActivity(), AccountEditActivity.class); intent.putExtra("isIncome", true); this.startActivityForResult(intent, 1); //startActivity(intent); } //刷新界面 private void refreshData() { AccountDao dbManager = new AccountDao(getContext()); // List<AccountItem> incomeAccountList = getTestData(); List<AccountItem> incomeAccountList = dbManager.getIncomeList(); AccountItemAdapter adapter = new AccountItemAdapter(incomeAccountList,getActivity()); ListView listView = (ListView) mRootView.findViewById(R.id.listView1); listView.setAdapter(adapter); TextView textViewIncomeSummary = (TextView) mRootView.findViewById(R.id.textViewIncomeSummary); textViewIncomeSummary.setText("10000"); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d("tinyaccount","onActivityResult"); refreshData(); } protected void deleteItem(final long id) { AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity()); builder.setTitle(R.string.delete_confirm_title); builder.setMessage(R.string.delete_confirm_msg); builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { AccountDao dbManager = new AccountDao(getContext()); dbManager.deleteIncome(id); refreshData(); } }); builder.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.show(); } private List<AccountItem> getTestData() { List<AccountItem> result = new ArrayList<>(); for(int i=0;i<5;i++) { AccountItem item = new AccountItem(); item.setId(i); item.setCategory("兼职收入"); item.setMoney(100*i); item.setDate("2019-01-0"+i); result.add(item); } return result; } }
package net.hnjdzy.tinyaccount.fragment; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import net.hnjdzy.tinyaccount.R; import net.hnjdzy.tinyaccount.activity.AccountEditActivity; import net.hnjdzy.tinyaccount.adapter.OutlayRecyclerViewAdapter; import net.hnjdzy.tinyaccount.entity.AccountItem; import java.util.ArrayList; import java.util.List; /** * 支出列表 * @author androiddev@163.com,hnjdzy */ public class OutlayFragment extends Fragment { private View mRootView; private RecyclerView mRecyclerView; public OutlayFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment mRootView = inflater.inflate(R.layout.fragment_outlay, container, false); initView(); return mRootView; } private void initView() { refresh(); Button buttonAdd = (Button)mRootView.findViewById(R.id.buttonAdd); buttonAdd.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { buttonAddOnClick(); } }); } protected void buttonAddOnClick() { Intent intent =new Intent(this.getActivity(), AccountEditActivity.class); intent.putExtra("isIncome", false); // this.startActivityForResult(intent, 1); startActivity(intent); } private void refresh(){ List<AccountItem> outlayAccountList = getTestData(); mRecyclerView = (RecyclerView)mRootView.findViewById(R.id.recyclerView); mRecyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity())); mRecyclerView.setAdapter(new OutlayRecyclerViewAdapter(this.getActivity(),outlayAccountList)); TextView textViewIncomeSummary = (TextView)mRootView.findViewById(R.id.textViewIncomeSummary); textViewIncomeSummary.setText("2000"); } private List<AccountItem> getTestData() { List<AccountItem> result = new ArrayList<>(); for(int i=0;i<10;i++) { AccountItem item = new AccountItem(); item.setId(i); item.setCategory("食物"); item.setMoney(100*i); item.setDate("2019-01-0"+i); result.add(item); } return result; } }