2014年8月1日 星期五

觀察: 開發筆記: 4) 編輯筆記程式

ToDo 筆記資料 Activity

由於 MyNotebook 的 Activity 新增資料會發出 Broadcast,由目前的 ToDo Activity 負責接收後馬上新增到資料表中,這個動作特別設計 myResetReceiver 類別來處理。

一進入該頁籤就開啟資料表將目前的筆記資料依照重要度欄位順序取出,並顯示在表格中。同時為每一列資料設定按下事件,以觸發一個編輯筆記對話框。

對話框彈出後,提供使用者進行資料編輯的編輯或刪除處哩,當刪除時從資料欄位進行標註,同時發出 Broadcast 給垃圾桶頁籤 Activity 進行接收處理。

ToDo.java
  1. package tw.brad.android.apps.MyNotebook;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.AlertDialog;  
  5. import android.content.BroadcastReceiver;  
  6. import android.content.Context;  
  7. import android.content.DialogInterface;  
  8. import android.content.Intent;  
  9. import android.content.IntentFilter;  
  10. import android.content.res.Resources;  
  11. import android.database.Cursor;  
  12. import android.database.sqlite.SQLiteDatabase;  
  13. import android.os.Bundle;  
  14. import android.view.LayoutInflater;  
  15. import android.view.View;  
  16. import android.view.View.OnClickListener;  
  17. import android.widget.EditText;  
  18. import android.widget.RatingBar;  
  19. import android.widget.TableLayout;  
  20. import android.widget.TableRow;  
  21. import android.widget.TextView;  
  22.   
  23. public class ToDo extends Activity {  
  24.     private TableLayout table;  
  25.     private TextView priority, title;  
  26.     private MyDBHelper dbHelper;  
  27.     private SQLiteDatabase db;  
  28.     private Resources res;  
  29.       
  30.     @Override  
  31.     protected void onCreate(Bundle savedInstanceState) {  
  32.         super.onCreate(savedInstanceState);  
  33.         setContentView(R.layout.todo);       
  34.           
  35.         res = getResources();  
  36.         table = (TableLayout)findViewById(R.id.table);  
  37.           
  38.         // ???桀????”  
  39.         dbHelper = new MyDBHelper(ToDo.this"brad", null, 1);  
  40.         db = dbHelper.getReadableDatabase();  
  41.         resetTable();  
  42.           
  43.         IntentFilter filter = new IntentFilter("tw.brad.android.apps.MyNotebook");  
  44.         myResetReceiver receiver = new myResetReceiver();  
  45.         registerReceiver(receiver, filter);  
  46.           
  47.     }  
  48.   
  49.     @Override  
  50.     public void finish() {  
  51.         super.finish();  
  52.         db.close();  
  53.         dbHelper.close();  
  54.     }  
  55.   
  56.     private class myResetReceiver extends BroadcastReceiver {  
  57.         @Override  
  58.         public void onReceive(Context context, Intent intent) {  
  59.             resetTable();  
  60.         }         
  61.     }  
  62.       
  63.     private void resetTable(){  
  64.         table.removeAllViews();  
  65.           
  66.         Cursor cursor = db.query("notebook", null, "status='yet'", null, null, null, "priority desc");          
  67.         while (cursor.moveToNext()){  
  68.             addRecord(new Integer(cursor.getInt(2)).toString(),  
  69.                     cursor.getString(1),  
  70.                     cursor.getString(3),  
  71.                     cursor.getInt(0));  
  72.         }  
  73.         cursor.close();  
  74.           
  75.     }  
  76.       
  77.     private void addRecord(String p, String t, String c, int id){  
  78.         final int dataid = id;  
  79.         final String datap = p;  
  80.         final String datac = c;  
  81.         final String datat = t;  
  82.           
  83.         // ?啣?銝€蝑???       TableRow tr = new TableRow(ToDo.this);  
  84.         priority = new TextView(ToDo.this);  
  85.         title = new TextView(ToDo.this);  
  86.           
  87.         priority.setText(p);  
  88.         priority.setTextSize(16);  
  89.         priority.setPadding(3, 3, 3, 3);  
  90.         priority.setWidth(64);  
  91.           
  92.         title.setText(t);   
  93.         title.setTextSize(16);  
  94.         title.setPadding(3, 3, 3, 3);  
  95.           
  96.         tr.addView(priority, 0);  
  97.         tr.addView(title, 1);  
  98.           
  99.         tr.setOnClickListener(new OnClickListener(){  
  100.   
  101.             @Override  
  102.             public void onClick(View v) {  
  103.                 // 靽格鞈?  
  104.                 editRecord(dataid, datap, datac, datat);  
  105.             }  
  106.               
  107.         });  
  108.           
  109.         table.addView(tr);  
  110.     }  
  111.       
  112.     private void editRecord(int id, String p, String c, String t){  
  113.         // 憿舐內靽格閬?  
  114.         AlertDialog alert = null;  
  115.   
  116.         LayoutInflater dialog = LayoutInflater.from(this);  
  117.         View dview = dialog.inflate(R.layout.edit, null);  
  118.   
  119.         final int did = id;  
  120.         final EditText et = (EditText)dview.findViewById(R.id.editTitle);  
  121.         final RatingBar rb = (RatingBar)dview.findViewById(R.id.editPriority);  
  122.         final EditText cont = (EditText)dview.findViewById(R.id.editCont);  
  123.           
  124.         et.setText(t);  
  125.         rb.setRating(new Integer(p));  
  126.         cont.setText(c);  
  127.           
  128.         AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  129.         builder.setTitle(res.getString(R.string.edit_note));  
  130.         builder.setView(dview);  
  131.         builder.setCancelable(true);  
  132.         builder.setPositiveButton(res.getString(R.string.edit_update),   
  133.                 new DialogInterface.OnClickListener(){  
  134.             @Override  
  135.             public void onClick(DialogInterface dialog, int which) {  
  136.                 String sql = "UPDATE notebook SET " +  
  137.                             "title = '" + et.getText() + "', " +  
  138.                             "content = '" + cont.getText() + "', " +  
  139.                             "priority = " + rb.getRating() + " WHERE " +  
  140.                             "_id = " + did;  
  141.                               
  142.                 db.execSQL(sql);  
  143.                 resetTable();  
  144.             }  
  145.               
  146.         });  
  147.   
  148.         builder.setNegativeButton(res.getString(R.string.edit_delete),   
  149.                 new DialogInterface.OnClickListener(){  
  150.             @Override  
  151.             public void onClick(DialogInterface dialog, int which) {  
  152.                 String sql ="UPDATE notebook SET " +  
  153.                             "del = 'false', " +  
  154.                             "status = 'done' WHERE " +  
  155.                             "_id = " + did;  
  156.                 db.execSQL(sql);  
  157.                 resetTable();  
  158.   
  159.                 Intent intent = new Intent("tw.brad.android.apps.MyNotebook.finish");  
  160.                 sendBroadcast(intent);  
  161.                   
  162.             }             
  163.         });  
  164.   
  165.         alert = builder.create();  
  166.         alert.show();  
  167.     }  
  168.       
  169. }  
參考資料:http://ithelp.ithome.com.tw/question/10139565

沒有留言:

張貼留言