Dựng cấu trúc
1. Tạo một project mới tên quanlycongviec.
2. 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ó.
public class QuanLyCongViec extendsSQLiteOpenHelper{
public QuanLyCongViec(Context context) {
super(context, "quanlycongviec",null, 1);
// TODOAuto-generated constructor stub
}
@Override
public voidonCreate(SQLiteDatabase db) {
// TODOAuto-generated method stub
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) {
// TODOAuto-generated method stub
db.execSQL("drop table if exists qlcv");
onCreate(db);
}
}
4. Tạo một class mới tên “CongViec” có nội dung 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
Tao menu item
1. 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>
2. Chạy chương trình và nhấn vào nút menu xem đã có menu “them” chưa
Tạo activiy them
1. Tạo một layout mới tên “activity_themcongviec.xml”. Có giao diện như hình
2. Tạo một 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) {
// TODOAuto-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);
}
}
3. Mở AndroidManifest lên và thêm activity.
<activity
android:name="com.example.quanlycongviec.ThemCongViec"
android:label="@string/app_name">
</activity>
4. Quay về file chính override lên onOptionsItemSelected và viết như sau:
@Override
public booleanonOptionsItemSelected(MenuItem item) {
// TODOAuto-generated method stub
switch(item.getItemId())
{
case R.id.them:
Intent i=
newIntent(getApplicationContext(),ThemCongViec.class);
startActivityForResult(i,999);
break;
}
return super.onOptionsItemSelected(item);
}
5. 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
1. Mở file “ThemCongViec.java” (activity ThemCongViec) và viết sự kiện nhấn button và trả về giá trị.
bt.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
// TODOAuto-generated method stub
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();
}
});
2. Quay về Activity chính và khai báo biến toàn cục
QuanLyCongViec quanlycongviec;
3. Trong hàm onCreate khởi tạo đối tượng
quanlycongviec=new QuanLyCongViec(this);
4. Override lên phương thức onActiviyResult. Lấy dữ liệu về và gọi hàm để thêm công việc vào database.
@Override
protected voidonActivityResult(int requestCode, int resultCode, Intent data) {
// TODOAuto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==999 && resultCode==RESULT_OK)
{
String noidung=data.getStringExtra("noidung");
String thoigian=data.getStringExtra("thoigian");
CongViec c=newCongViec(noidung,thoigian);
quanlycongviec.taoCongViec(c);
}
}
Đọc dữ liệu từ database đưa lên ListView
Hàm lấy công việc trả về ArrayList
1. Mở file “QuanLyCongViec.java” và thêm một hàm để lấy tất cả công việc ra
publicArrayList<CongViec> layCongViec()
{
ArrayList<CongViec> ds_cv=newArrayList<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=newCongViec(id,noidung,thoigian);
ds_cv.add(a);
}while(contro.moveToNext());
return ds_cv;
}
Xây dựng ListView
1. 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>
2. Quay về file java chính khai báo biến toàn cục
ArrayList<CongViec> ds_congviec=newArrayList<CongViec>();
3. 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() {
// TODOAuto-generated method stub
return ds_congviec.size();
}
public Object getItem(int arg0) {
// TODOAuto-generated method stub
return ds_congviec.get(arg0);
}
public long getItemId(int arg0) {
// TODOAuto-generated method stub
return arg0;//ds_congviec.get(arg0).id;
}
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODOAuto-generated method stub
View_Mot_O mot_o;
LayoutInflater inf= ((Activity)context).getLayoutInflater();
if(arg1==null)
{
mot_o = newView_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;
}
}
4. 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 voiddocdulieu(Context c)
{
ds_congviec=quanlycongviec.layCongViec();
lv.setAdapter(new myadapter(c));
}
5. Trong hàm onCreate sau khi tạo quanlycongviec xong ta gọi hàm đoc dữ liệu đưa lên listview ở đây dùng try catch để bẫy 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)
{
}
6. Cuối cùng để cập nhật lại dữ liệu sau mỗi lần thêm thì ta bổ xung trong onActivityResult
@Override
protected voidonActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
…………………………………………………………………
quanlycongviec.taoCongViec(c);
docdulieu(this);
}
}
7. Chạy chương trình, thêm dữ liệu mới và xem kết được cập nhật.
No comments:
Post a Comment