Chương Trình Quản Lý Công Việc

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 

  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ó.
    Untitled  
  3.  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);
    	}
    }
  4. 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

  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à ấn vào nút menu xem đã có item “them cong viec ” chưa.
  3. tạo 1 layout mới tên “activity_themcongviec.xml”
    2
  4. 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);	
    	}
    }
  5. Mở AndroidManifest lên và thêm activity.
    <activity
                android:name="com.example.quanlycongviec.ThemCongViec"
                android:label="@string/app_name" >
    </activity> 
  6. 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);
    }
  7. 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(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();
    	}
    });
  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 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:

  1. 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;
    }
    
  2. 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>
  3. Quay về file java chính khai báo biến toàn cục:
    ArrayList<CongViec> ds_congviec=new ArrayList<CongViec>();
  4. 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;
    	}		
    }
  5. 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));
    		
    	}
  6. 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)
    {}
  7. Chạy chương trình và xem kết quả.

    Tải code Tại Đây