Android App 開發專案過程分享
http://ithelp.ithome.com.tw/ironman6/player/xq3da2/dev/1
ToDo 筆記資料 Activity
由於 MyNotebook 的 Activity 新增資料會發出 Broadcast,由目前的 ToDo Activity 負責接收後馬上新增到資料表中,這個動作特別設計 myResetReceiver 類別來處理。
一進入該頁籤就開啟資料表將目前的筆記資料依照重要度欄位順序取出,並顯示在表格中。同時為每一列資料設定按下事件,以觸發一個編輯筆記對話框。
對話框彈出後,提供使用者進行資料編輯的編輯或刪除處哩,當刪除時從資料欄位進行標註,同時發出 Broadcast 給垃圾桶頁籤 Activity 進行接收處理。
ToDo.java
package tw.brad.android.apps.MyNotebook;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.RatingBar;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class ToDo extends Activity {
private TableLayout table;
private TextView priority, title;
private MyDBHelper dbHelper;
private SQLiteDatabase db;
private Resources res;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.todo);
res = getResources();
table = (TableLayout)findViewById(R.id.table);
// ???桀????”
dbHelper = new MyDBHelper(ToDo.this, "brad", null, 1);
db = dbHelper.getReadableDatabase();
resetTable();
IntentFilter filter = new IntentFilter("tw.brad.android.apps.MyNotebook");
myResetReceiver receiver = new myResetReceiver();
registerReceiver(receiver, filter);
}
@Override
public void finish() {
super.finish();
db.close();
dbHelper.close();
}
private class myResetReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
resetTable();
}
}
private void resetTable(){
table.removeAllViews();
Cursor cursor = db.query("notebook", null, "status='yet'", null, null, null, "priority desc");
while (cursor.moveToNext()){
addRecord(new Integer(cursor.getInt(2)).toString(),
cursor.getString(1),
cursor.getString(3),
cursor.getInt(0));
}
cursor.close();
}
private void addRecord(String p, String t, String c, int id){
final int dataid = id;
final String datap = p;
final String datac = c;
final String datat = t;
// ?啣?銝€蝑??? TableRow tr = new TableRow(ToDo.this);
priority = new TextView(ToDo.this);
title = new TextView(ToDo.this);
priority.setText(p);
priority.setTextSize(16);
priority.setPadding(3, 3, 3, 3);
priority.setWidth(64);
title.setText(t);
title.setTextSize(16);
title.setPadding(3, 3, 3, 3);
tr.addView(priority, 0);
tr.addView(title, 1);
tr.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// 靽格鞈?
editRecord(dataid, datap, datac, datat);
}
});
table.addView(tr);
}
private void editRecord(int id, String p, String c, String t){
// 憿舐內靽格閬?
AlertDialog alert = null;
LayoutInflater dialog = LayoutInflater.from(this);
View dview = dialog.inflate(R.layout.edit, null);
final int did = id;
final EditText et = (EditText)dview.findViewById(R.id.editTitle);
final RatingBar rb = (RatingBar)dview.findViewById(R.id.editPriority);
final EditText cont = (EditText)dview.findViewById(R.id.editCont);
et.setText(t);
rb.setRating(new Integer(p));
cont.setText(c);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(res.getString(R.string.edit_note));
builder.setView(dview);
builder.setCancelable(true);
builder.setPositiveButton(res.getString(R.string.edit_update),
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
String sql = "UPDATE notebook SET " +
"title = '" + et.getText() + "', " +
"content = '" + cont.getText() + "', " +
"priority = " + rb.getRating() + " WHERE " +
"_id = " + did;
db.execSQL(sql);
resetTable();
}
});
builder.setNegativeButton(res.getString(R.string.edit_delete),
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
String sql ="UPDATE notebook SET " +
"del = 'false', " +
"status = 'done' WHERE " +
"_id = " + did;
db.execSQL(sql);
resetTable();
Intent intent = new Intent("tw.brad.android.apps.MyNotebook.finish");
sendBroadcast(intent);
}
});
alert = builder.create();
alert.show();
}
}