Chào các bạn!!!
Hôm nay, mình xin giới thiệu bài Quản Lý Công Việc. Bài này sẽ giới thiệu cho chúng ta biết cách đưa item lên menu , giới thiệu về cách sử dụng SQLiteOpenHelper và cách gọi class và bây giờ chúng ta sẽ bắt đầu với bài : Chương Trình Quản Lý Công Việc
- Tạo một project mới tên quanlycongviec.
- Tạo giao diện chính gồm một TextView và một ListView. Sửa TextView thành quản lý công việc. Ánh xạ nó.
- Tạo một class mới tên “QuanLyCongViec” kế thừa từ SQLiteOpenHelper và thêm nội dung như sau:
public class QuanLyCongViec extends SQLiteOpenHelper { public QuanLyCongViec(Context context) { super(context, "quanlycongviec",null, 1); } @Override public void onCreate(SQLiteDatabase db) { String sql="create table qlcv" + "(" + "_id integer primary key autoincrement," + "noidung text," + "thoigian text" + ") "; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists qlcv"); onCreate(db); } }
- Tạo một class mới tên “CongViec” như sau:
public class CongViec { public int id; public String noidung; public String thoigian; public CongViec(String nd,String tg) { this.noidung=nd; this.thoigian=tg; } public CongViec(int id,String nd,String tg) { this.id=id; this.noidung=nd; this.thoigian=tg; } }
Tạo menu và activity thêm một công việc
- Eclipse mới đã tự tạo ra một OptionMenu cho ta, ta chỉ cần thêm dữ liệu (Trong MainActivity ta thấy đã override onCreateOptionMenu). Mở file activity_main.xml trong thư mục menu và thêm vào 1 item để được giống mã bên dưới.
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_settings" android:orderInCategory="100" android:title="@string/menu_settings"/> <item android:id="@+id/them" android:title="them cong viec" /> </menu>
- chạy chương trình và ấn vào nút menu xem đã có item “them cong viec ” chưa.
- tạo 1 layout mới tên “activity_themcongviec.xml”
- Tạo 1 class mới tên “ThemCongViec.class” kế thừa từ activity và override lên hàm onCreate. Gán layout rồi ánh xạ 2 edittext và 1 button.
public class ThemCongViec extends Activity{ EditText et_noidung,et_thoigian; Button bt; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_themcongviec); et_noidung=(EditText)findViewById(R.id.editText1); et_thoigian=(EditText)findViewById(R.id.editText2); } }
- Mở AndroidManifest lên và thêm activity.
<activity android:name="com.example.quanlycongviec.ThemCongViec" android:label="@string/app_name" > </activity>
- Quay về file chính override lên onOptionsItemSelected và viết như sau:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.them: Intent i= new Intent(getApplicationContext(),ThemCongViec.class); startActivityForResult(i,999); break; } return super.onOptionsItemSelected(item); }
- Chạy chương trình, nhấp menu chọn thêm công việc để xem đã chuyển qua được activity thêm công việc chưa.
Lấy Dữ Liệu Trả về từ intent, đưa vào database
- Mở file “ThemCongViec.java” (activity ThemCongViec) và viết sự kiện nhấn button và trả về giá trị.
bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String noidung=et_noidung.getText().toString(); String thoigian=et_thoigian.getText().toString(); Intent i=new Intent(); i.putExtra("noidung", noidung); i.putExtra("thoigian", thoigian); setResult(RESULT_OK,i); finish(); } });
- Quay về Activity chính và khai báo biến toàn cục:
QuanLyCongViec quanlycongviec;
- Trong hàm onCreate khởi tạo đối tượng:
quanlycongviec=new QuanLyCongViec(this);
- Override lên phương thức onActivityResult. Lấy dữ liệu về và gọi hàm để thêm công việc vào database.
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==999 && resultCode==RESULT_OK) { String noidung=data.getStringExtra("noidung"); String thoigian=data.getStringExtra("thoigian"); CongViec c=new CongViec(noidung,thoigian); quanlycongviec.taoCongViec(c); } }
Đọc dữ liệu từ database đưa lên ListView:
- Mở file “QuanLyCongViec.java” và thêm một hàm để lấy tất cả công việc ra:
public ArrayList<CongViec> layCongViec() { ArrayList<CongViec> ds_cv=new ArrayList<CongViec>(); SQLiteDatabase db=this.getReadableDatabase(); Cursor contro=db.rawQuery("select * from qlcv",null); contro.moveToFirst(); do { int id=Integer.parseInt(contro.getString(0)); String noidung=contro.getString(1); String thoigian=contro.getString(2); CongViec a=new CongViec(id,noidung,thoigian); ds_cv.add(a); }while(contro.moveToNext()); return ds_cv; }
- Tạo một file xml mới tên “listview_item.xml” và kéo vào 3 TextView, TextView đầu tiên có thuộc tính visibility:gone để không hiển thị(nhưng vẫn tồn tại, nó sẽ chứa id cho dễ quản lý)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textViewid" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Large Text" android:visibility="gone" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/textViewnoidung" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/textViewthoigian" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Medium Text" android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout>
- Quay về file java chính khai báo biến toàn cục:
ArrayList<CongViec> ds_congviec=new ArrayList<CongViec>();
- Xây dựng thêm 2 class cục bộ để làm adpater:
public static class View_Mot_O { TextView id; TextView noidung; TextView thoigian; } class myadapter extends BaseAdapter{ Context context; myadapter(Context c) { context=c; } public int getCount() { // TODO Auto-generated method stub return ds_congviec.size(); } public Object getItem(int arg0) { // TODO Auto-generated method stub return ds_congviec.get(arg0); } public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0;//ds_congviec.get(arg0).id; } public View getView(int arg0, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub View_Mot_O mot_o; LayoutInflater inf= ((Activity)context).getLayoutInflater(); if(arg1==null) { mot_o = new View_Mot_O(); arg1 = inf.inflate(R.layout.listview_item, null); mot_o.id= (TextView) arg1.findViewById(R.id.textViewid); mot_o.noidung = (TextView)arg1.findViewById(R.id.textViewnoidung); mot_o.thoigian = (TextView)arg1.findViewById(R.id.textViewthoigian); arg1.setTag(mot_o); } else mot_o=(View_Mot_O)arg1.getTag(); mot_o.id.setText(ds_congviec.get(arg0).id+""); mot_o.noidung.setText(ds_congviec.get(arg0).noidung); mot_o.thoigian.setText(ds_congviec.get(arg0).thoigian); return arg1; } }
- Xây dựng một hàm mới tên “docdulieu” để lấy dữ liệu ra và gán lên listview. Tách thành hàm rời để tái sử dụng.
public void docdulieu(Context c) { ds_congviec=quanlycongviec.layCongViec(); lv.setAdapter(new myadapter(c)); }
- Trong hàm onCreate sau khi tạo qualycongviec xong ta gọi hàm đọc dữ liệu đưa lên listview ở đây dùng try catch để tránh trường hợp khi lần đầu chạy thì làm gì có dữ liệu để đọc ra.
quanlycongviec=new QuanLyCongViec(this); try{ docdulieu(this); }catch(Exception e) {}
- Chạy chương trình và xem kết quả.
Tải code Tại Đây