现在介绍下关于记账界面代码:
BillsActivity.java,主要从数据库获得数据,并通过listview显示。常按能够删除账单条目。
package com.bank; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.MotionEvent; import android.view.View; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; public class BillsActivity extends Activity implements View.OnClickListener { //列举数据的ListView private ListView mlistbills; // 适配器 private SimpleAdapter mlistbillsAdapter; //数据库 private MySQLiteHelper mMysql; private SQLiteDatabase mDataBase; private ImageView imageviewback; // 存储数据的数组列表 ArrayList<HashMap<String, Object>> listData = new ArrayList<HashMap<String, Object>>(); public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bills); mlistbills = (ListView) this.findViewById(R.id.list_bills); imageviewback = (ImageView) this.findViewById(R.id.imageviewBack); imageviewback.setOnClickListener(this); GetData(); mlistbillsAdapter = new SimpleAdapter( this, listData, R.layout.billsitem, new String[]{"Time", "Type", "Fee", "Remarks"}, new int[]{R.id.texttimeshow, R.id.imagetypeshow, R.id.textfeeshow, R.id.textremarksshow} ); //赋予数据 mlistbills.setAdapter(mlistbillsAdapter); //常按响应 mlistbills.setOnCreateContextMenuListener(listviewLongPress); //点击事件 mlistbills.setOnTouchListener(onTouchListener); } View.OnTouchListener onTouchListener = new View.OnTouchListener() { float x, y, ux, uy; @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN: x = event.getX(); y = event.getY(); break; case MotionEvent.ACTION_UP: ux = event.getX(); uy = event.getY(); int p2 = ((ListView)v).pointToPosition((int) ux, (int) uy); return false; } return false; } }; AdapterView.OnItemLongClickListener listviewLongClick = new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { return false; } }; AdapterView.OnItemClickListener listviewClick = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(getApplicationContext(), "weffwe", Toast.LENGTH_SHORT).show(); } }; //从数据库获得适配器数据 public void GetData() { mMysql = new MySQLiteHelper(this, "finance.db", null, 1); mDataBase = mMysql.getReadableDatabase(); Cursor cursor = mDataBase.rawQuery("select * from finance order by ID DESC ", null); cursor.moveToFirst(); int columnsSize = cursor.getColumnCount(); int number = 0; while (number < cursor.getCount()) { // cursor.move(i); HashMap<String, Object> map = new HashMap<String, Object>(); String budget = cursor.getString(cursor.getColumnIndex("Budget")); map.put("ID", cursor.getString(cursor.getColumnIndex("ID"))); map.put("Fee", cursor.getDouble(cursor.getColumnIndex("Fee"))); map.put("Time", cursor.getString(cursor.getColumnIndex("Time"))); if (budget.equals("收入")) map.put("Fee", "+" + cursor.getString(cursor.getColumnIndex("Fee"))); else map.put("Fee", "-" + cursor.getString(cursor.getColumnIndex("Fee"))); map.put("Remarks", cursor.getString(cursor.getColumnIndex("Remarks"))); if ((cursor.getString(cursor.getColumnIndex("Type"))).equals("衣")) { map.put("Type", R.drawable.cloth); } else if ((cursor.getString(cursor.getColumnIndex("Type"))).equals("食")) { map.put("Type", R.drawable.shi); } else if ((cursor.getString(cursor.getColumnIndex("Type"))).equals("住")) { map.put("Type", R.drawable.zhu); } else if ((cursor.getString(cursor.getColumnIndex("Type"))).equals("行")) { map.put("Type", R.drawable.xing); } else if ((cursor.getString(cursor.getColumnIndex("Type"))).equals("其他")) { map.put("Type", R.drawable.getmoney); } cursor.moveToNext(); listData.add(map); number++; System.out.println(listData); } cursor.close(); mDataBase.close(); mMysql.close(); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.imageviewBack: this.finish(); break; default: break; } } // 长按事件响应 View.OnCreateContextMenuListener listviewLongPress = new View.OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { // TODO Auto-generated method stub final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; new AlertDialog.Builder(BillsActivity.this) /* 弹出窗口的最上头文字 */ .setTitle("删除当前数据") /* 设置弹出窗口的图式 */ .setIcon(android.R.drawable.ic_dialog_info) /* 设置弹出窗口的信息 */ .setMessage("确定删除当前记录") .setPositiveButton("是", new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialoginterface, int i) { // 获取位置索引 int mListPos = info.position; // 获取对应HashMap数据内容 HashMap<String, Object> map = listData.get(mListPos); // 获取id int id = Integer.valueOf((map.get("ID").toString())); // 获取数组具体值后,可以对数据进行相关的操作,例如更新数据 String[] whereArgs = new String[]{String.valueOf(id)}; //获取当前数据库 mMysql = new MySQLiteHelper(BillsActivity.this, "finance.db", null, 1); mDataBase = mMysql.getReadableDatabase(); try { mDataBase.delete("Finance", "ID=?", whereArgs); listData.remove(mListPos); mlistbillsAdapter.notifyDataSetChanged(); } catch (Exception e) { Log.e("删除出错了", "error"); } finally { mDataBase.close(); mMysql.close(); } } } ).setNegativeButton( "否", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { } } ).show(); } }; }
RecorderActivity.java
主要功能是添加账目,记录自己的消费。
package com.bank; import android.app.Activity; import android.app.DatePickerDialog; import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.text.format.DateFormat; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.ImageButton; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Spinner; import android.widget.TextView; import java.util.ArrayList; import java.util.Calendar; public class RecorderActivity extends Activity implements View.OnClickListener { private Button mbutton_sure, mbutton_cancel; private Spinner mspinner_type; private EditText medittext_fee, medittext_remarks; private TextView medittext_time; private RadioGroup mRadiogroup; private MySQLiteHelper mMysql; private SQLiteDatabase mDataBase; private ImageButton imageButtonBack; // 用来装日期的 private Calendar calendar; //日历控件 private DatePickerDialog dialog; //保存类型数据 private String content_type, content_select_group; private ArrayList<String> Data = new ArrayList<String>(); public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recorder); //获得控件 mbutton_sure = (Button) findViewById(R.id.plan_sure); mbutton_cancel = (Button) findViewById(R.id.button_cancel); medittext_time = (TextView) findViewById(R.id.edit_text_time); medittext_fee = (EditText) findViewById(R.id.editText_fee); medittext_remarks= (EditText) findViewById(R.id.editText_remarks); mbutton_sure = (Button) findViewById(R.id.plan_sure); mspinner_type= (Spinner) findViewById(R.id.spinner_type); mRadiogroup = (RadioGroup) this.findViewById(R.id.radioGroup); imageButtonBack= (ImageButton) this.findViewById(R.id.imageButtonBack); //设置Spinner的数据并操作 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.Select_item, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //将数据和spinner控件绑定在一起 mspinner_type.setAdapter(adapter); medittext_time.setOnClickListener(this); imageButtonBack.setOnClickListener(this); mspinner_type.setOnItemSelectedListener(listener); mRadiogroup.setOnCheckedChangeListener(grouplistener); mbutton_sure.setOnClickListener(this); mbutton_cancel.setOnClickListener(this); } //单选按钮点击响应 RadioGroup.OnCheckedChangeListener grouplistener = new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup arg0, int arg1) { // TODO Auto-generated method stub //获取变更后的选中项的ID int radioButtonId = arg0.getCheckedRadioButtonId(); //根据ID获取RadioButton的实例 content_select_group = (((RadioButton) findViewById(radioButtonId)).getText()).toString(); } }; //spinner控件的响应事件 AdapterView.OnItemSelectedListener listener = new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { content_type = mspinner_type.getItemAtPosition(pos).toString(); // Toast.makeText(getActivity(), "选中了"+content_type, Toast.LENGTH_LONG).show(); } public void onNothingSelected(AdapterView<?> parent) { // Another interface callback } }; //视图组件点击时间 @Override public void onClick(View view) { switch (view.getId()) { case R.id.plan_sure: Data.clear(); Data.add(content_type); Data.add(medittext_time.getText().toString()); Data.add(medittext_fee.getText().toString()); Data.add(medittext_remarks.getText().toString()); Data.add(content_select_group); // Toast.makeText(getActivity(), "click sure button" + Data, Toast.LENGTH_LONG).show(); WriteData(Data); // Toast.makeText(getActivity(), "click sure button" + Data, Toast.LENGTH_LONG).show(); break; case R.id.button_cancel: // GetData() this.finish(); break; case R.id.imageButtonBack: this.finish(); break; case R.id.edit_text_time: calendar = Calendar.getInstance(); dialog = new DatePickerDialog( this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { calendar.set(year, monthOfYear, dayOfMonth); medittext_time.setText(DateFormat.format("yyy-MM-dd", calendar)); } }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) ); dialog.show(); break; default: break; } } public void WriteData(ArrayList<String> Data) { mMysql = new MySQLiteHelper(this, "finance.db", null, 1); mDataBase = mMysql.getReadableDatabase(); ContentValues cv=new ContentValues(); cv.put("Type",Data.get(0)); cv.put("Time",Data.get(1)); cv.put("Fee",Data.get(2)); cv.put("Remarks",Data.get(3)); cv.put("Budget",Data.get(4)); mDataBase.insert("finance", "Type", cv); mDataBase.close(); mMysql.close(); //结束当前activity this.finish(); } }
recordActivity布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="match_parent" android:background="#e2efd9" > <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:id="@+id/linearLayout3" android:orientation="horizontal" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="false" android:background="#444eb9" android:weightSum="1" android:gravity="center_vertical"> <ImageButton android:layout_width="80dp" android:layout_height="30dp" android:id="@+id/imageButtonBack" android:src="@drawable/back" android:background="#444eb9"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="记一笔" android:id="@+id/textView2" android:layout_gravity="center_vertical" android:background="#444eb9" android:layout_marginLeft="80dp" android:textColor="#FFFFFF" android:textStyle="bold" android:editable="false" android:enabled="false" android:hint="size" android:textIsSelectable="false" android:textSize="20dp"/> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="类型" android:id="@+id/texttype" android:layout_gravity="center_horizontal" android:textStyle="bold" android:clickable="false" android:editable="false" android:textColor="#0472f8" android:layout_weight="0.00" android:layout_marginLeft="57dp" android:layout_marginStart="57dp" android:layout_marginTop="24dp" android:layout_below="@+id/radioGroup" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="时间" android:id="@+id/texttimeshow" android:layout_gravity="center_horizontal" android:textColor="#0472f8" android:layout_below="@+id/texttype" android:layout_toLeftOf="@+id/spinner_type" android:layout_toStartOf="@+id/spinner_type" android:layout_marginTop="44dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="费用" android:id="@+id/textfeeshow" android:layout_gravity="center_horizontal" android:textColor="#0472f8" android:layout_marginTop="29dp" android:layout_below="@+id/edit_text_time" android:layout_toLeftOf="@+id/spinner_type" android:layout_toStartOf="@+id/spinner_type"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="备注" android:id="@+id/textremarksshow" android:layout_gravity="center_horizontal" android:textColor="#0472f8" android:layout_marginTop="27dp" android:layout_below="@+id/editText_fee" android:layout_toLeftOf="@+id/spinner_type" android:layout_toStartOf="@+id/spinner_type"/> <Spinner android:layout_width="match_parent" android:layout_height="25dp" android:id="@+id/spinner_type" android:spinnerMode="dialog" android:entries="@array/Select_item" android:layout_alignBottom="@+id/texttype" android:layout_toRightOf="@+id/texttype" android:layout_marginLeft="43dp" android:layout_marginRight="50dp" android:gravity="center_vertical|center" android:paddingLeft="50dp" android:touchscreenBlocksFocus="false" android:layout_alignParentLeft="false" style="@android:style/TextAppearance.Holo"/> <TextView android:id="@+id/edit_text_time" android:layout_width="wrap_content" android:layout_height="40dp" android:background="@android:drawable/edit_text" android:layout_alignTop="@+id/texttimeshow" android:layout_alignLeft="@+id/spinner_type" android:layout_alignStart="@+id/spinner_type" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_marginRight="50dp" android:editable="true" android:gravity="center" android:textColor="#736bae"/> <EditText android:id="@+id/editText_fee" android:editable="true" android:layout_width="match_parent" android:layout_height="40dp" android:background="@android:drawable/edit_text" android:layout_alignTop="@+id/textfeeshow" android:layout_alignLeft="@+id/edit_text_time" android:layout_alignStart="@+id/edit_text_time" android:layout_marginRight="50dp" android:textColor="#fc0303" android:gravity="center"/> <EditText android:id="@+id/editText_remarks" android:layout_width="fill_parent" android:layout_height="94dp" android:inputType="textMultiLine" android:singleLine="false" android:gravity="left|top" android:width="2dip" android:background="@android:drawable/edit_text" android:layout_alignTop="@+id/textremarksshow" android:layout_alignLeft="@+id/editText_fee" android:layout_alignStart="@+id/editText_fee" android:layout_marginRight="50dp" android:textColor="#5e5b5b" android:textSize="15dp"/> <Button android:layout_width="50dp" android:layout_height="30dp" android:text="保存" android:id="@+id/plan_sure" android:background="@drawable/buttonshape" android:layout_below="@+id/editText_remarks" android:layout_alignLeft="@+id/texttype" android:layout_alignStart="@+id/texttype" android:layout_marginTop="36dp" android:layout_marginLeft="20dp"/> <Button android:layout_width="50dp" android:layout_height="30dp" android:text="取消" android:id="@+id/button_cancel" android:background="@drawable/buttonshape" android:layout_alignTop="@+id/plan_sure" android:layout_alignRight="@+id/editText_remarks" android:layout_alignEnd="@+id/editText_remarks" android:layout_marginRight="20dp"/> <RadioGroup android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" android:gravity="center_vertical" android:id="@+id/radioGroup" android:layout_below="@+id/linearLayout3" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="58dp"> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="收入" android:id="@+id/radioButton" android:checked="false" android:layout_below="@+id/linearLayout3" android:layout_alignLeft="@+id/texttimeshow" android:layout_alignStart="@+id/texttimeshow" android:layout_gravity="center_vertical" android:layout_marginLeft="50dp"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="支出" android:id="@+id/radioButton2" android:checked="false" android:layout_alignBottom="@+id/radioGroup" android:layout_centerHorizontal="true" android:layout_marginLeft="50dp"/> </RadioGroup> </RelativeLayout>