Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
29,92 KB
Nội dung
Bài tập 25: Tiếp tục củng cố kiến thức Intent, ví dụ tổng hợp Quản Lý Nhân Viên - Ở tập 24 bạn hiểu Intent - Bài tập Tôi chủ ý viết thật phức tạp lên để bạn tập trung cơng lực tìm hiểu - Xin lỗi để bạn chờ lâu cập nhật tập - Bây Tơi tiếp tục hướng dẫn bạn tìm hiểu sâu Android ôn tập lại thành phần học trước - Bài tập Tơi chủ ý giải thích (vì giải thích nhiều tập trước rồi) Bài tập bạn phải tập suy luận logic để hiểu sâu - Tôi tin bạn hiểu tập 25 bạn viết chương trình Android trò Vì tổng hợp kiến thức Android mà Tơi trình bày từ trước tới - Mục tiêu tập này: —————————————————————————— - Thao tác nhuần nhuyễn với Intent - Ôn tập lại control thường hay sử dụng - Nhuần nhuyễn với ListView - Xử lý Checked (radio, Checkbox) ListView - Nhuần nhuyễn với Custom Layout - Biết cách sử dụng Enum - Cách sử dụng chung Layout cho Activity - … đón nhận thêm số ý tưởng sáng tạo lập trình —————————————————————————— - Bài khó phức tạp, đổi lại hay Tơi hi vọng tập giúp ích cho bạn nhiều việc khám phá Android Vì Tơi khuyên bạn chăm làm làm lại 217 - Mơ tả chương trình: + Chương trình cho phép quản lý nhân viên + phòng ban + Mỗi phòng ban có nhiều nhân viên, phòng ban cần lưu trữ (mã phòng ban, tên phòng ban) + Một phòng ban có Trưởng phòng Phó phòng Trưởng phòng có 1, phó phòng số lượng khơng giới hạn (hoặc khơng có) + Thơng tin nhân viên : Mã nhân viên, tên nhân viên, giới tính (nam, nữ), chức vụ (trưởng phòng, phó phòng, nhân viên) + Chương trình cho phép: ♣ Thêm/sửa/ xóa phòng ban ♣ Thêm / sửa / xóa nhân viên ♣ cho phép nhân viên chuyển phòng ban ♣ cho phép thiết lập ban lãnh đạo phòng ban (trưởng phó) ♣ số chức khác Sau demo giao diện chương trình: - Tơi giải thích sau: + Nút “Lưu Phòng Ban“: Cho phép lưu phòng ban cập nhật vào ListView Nếu mã phòng ban tồn tự động cập nhật, mã phòng ban chưa tồn phải thêm + Sự kiện nhấn ListView: nhấn vào phòng ban hiển thị lại thơng tin phòng ban vào phần edittext bên + ListView phải sử dụng Custom Layout, Ta phải tự thiết kế Layout cho ListView bên trên: 218 * Mỗi phần tử ListView có chứa TextView, TextView dùng để hiển thị mã phòng ban tên phòng ban, ý phải cho người sử dụng biết Phòng ban có nhân viên hay chưa có, có nhân viên có người (xem hình trên) * Mỗi phòng ban phải cho biết Trưởng Phòng phó phòng (xem hình) * Ví dụ bạn nhìn vào phòng Kỹ Thuật: Bạn thấy thơng tin phòng ban số nhân viên phòng ban Và Trưởng Phòng tên “Đồn Ái Nương“ Có Phó Phòng “Trần Đạo Đức” “Nguyễn Đại Tài“ *Phòng dịch vụ chưa có nhân viên *Phòng Truyền Thơng có nhân viên có trưởng phòng “Nguyễn Thị Téo“ - Tiếp tục xử lý Context Menu cho ListView Phòng ban: - Khi nhấn thật lâu vào phòng ban đó, ví dụ trường hợp phòng Kỹ Thuật, chương trình hiển thị context Menu có chức năng: Thêm nhân viên Xem danh sách nhân viên Lập trưởng/ phó phòng xóa phòng ban - Ứng với chức ta có: Thêm nhân viên: - Mặc định nhân viên tạo có chức vụ Nhân Viên (khơng có chức quản lý): 219 - Nút “xóa trắng “: cho phép xóa liệu EditText focus tới mã nhân viên - Nút “Lưu nhân viên”, cho phép thêm nhân viên vào phòng ban, Giới Tính Nam, Nữ để hiển thị hình ảnh cho - Sau bấm nút “Lưu nhân viên”, cập nhật lại danh sách phòng ban (cập nhập số lượng nhân viên cho phòng ban) - Ví dụ hình Tơi bấm “Lưu nhân viên”, hình tắt để hiển thị lại hình chính, phòng ban Kỹ Thuật số lượng nhân viên tăng lên 4, xem hình: Xem danh sách nhân viên: - Chương trình thị danh sách nhân viên phòng ban chọn, ví dụ trường hợp xem danh sách nhân viên phòng ban Kỹ thuật: - Như bạn thấy Màn hình xem danh sách nhân viên có chức sau: 220 + Nút mũi tên “BacK” cho phép trở hình +Nhân viên có hình theo giới tính (nam, nữ) + Nhân viên có mơ tả: Chức vụ, giới tình + Vậy ta phải dùng Custom layout - Bây ta xem chức Context Menu cho ListVỉew mục xem danh sách nhân viên: - Vậy hình có chức năng: 2.1 Sửa nhân viên 2.2 Chuyển phòng ban 2.3 xóa nhân viên - Ta vào chức năng: 2.1 Sửa nhân viên: - Ở ví dụ ta nhấn thật lâu vào nhân viên tên “Trần Đạo Đức“, sau Context Menu hiển thị lên, ta chọn sửa nhân viên, hình sửa xuất sau (chú ý Activity sửa nhân viên sử dụng chung Layout với Activity thêm nhân viên): 221 - Thông tin nhân viên “Trần Đạo Đức” hiển thị Mã nhân viên cấm thay đổi, chức khác y xì hình thêm nhân viên - Trong trường hợp Tôi sửa “Trần Đạo Đức” thành “Trần Thế” nhấn nút “Lưu nhân viên” hình đóng lại để trở hình xem danh sách, bạn quan sát thay đổi sau: 2.2 Chuyển phòng ban: - Bây ta vào chức chuyển phòng ban cho nhân viên Chương trình hiển thị danh sách phòng ban (có RadioButton bên cạnh cho phép chuyển phòng ban) - Bây Tôi chọn “Trần Thế” chuyển qua phòng Dịch vụ (Nhấn thật lâu vào Trần Thế, context menu hiển thị ta chọn Chức Chuyển phòng ban): - Sau chọn phòng ban để chuyển, nhấn nút có hình “Apply”, chương trình quay lại hình xem danh sách nhân viên, lúc Bạn khơng thấy nhân viên Trần Thế nữa, nhân viên chuyển qua phòng dịch vụ: 222 - Bạn kiểm tra lại cách bấm nút “Back” để trở hình chính, hình xuất nhân viên mà ta vừa chuyển: 2.3 xóa nhân viên - ta qua chức Xóa nhân viên hình xem danh sách, chương trình hiển thị hình hỏi xem có chắn muốn xóa hay khơng? nhấn đồng ý để xóa: - Ví dụ Tơi chọn nhân viên tên “Trần Duy Thanh” xóa: Lập trưởng/ phó phòng: 223 - ta qua chức Lập trưởng / phó phòng cho phòng ban (tại hình chính) - Khi context Menu hiển thị lên ta chọn “Lập trưởng phó phòng”: - Ví dụ, Tơi nhấn thật lâu vào phòng ban “Truyền Thơng”, sau Tơi thiết lập trưởng phó phòng lại cho phòng ban này, xem giao diện bên dưới: Sau chọn “lập trưởng/ phó phòng”, chương trình hiển thị hình thiết lập bên dưới: - Trưởng phòng cho phép chọn (dùng Radio Button) - Phó phòng cho phép chọn tùy ý (dùng Checkbox) - Ta dùng layout có sẵn android (khơng phải custom layout), viết lại kiện onclick cho ListView hiểu mà thơi - Sau chọn Trưởng/ phó, click “Apply ” chương trình trở hình chính, quan sát: 224 - Bạn thấy đó, Trưởng phòng phó phòng cập nhật xóa phòng ban - Ta qua chức cuối cùng: Xóa phòng ban, tưởng tự xóa nhân viên CHương trình hỏi ta có chắn muốn xóa hay khơng? - Như Tôi mô tả xong yêu cầu tốn Bây Tơi chi tiết vào coding: - Bạn xem cấu trúc thư mục Android Project: 225 226 - Bạn quan sát phần Source Code Tôi chia làm Package: 1) tranduythanh.com.model -> dùng để viết mơ hình hóa đối tượng 2) tranduythanh.com.adapter -> dùng để viết Customlayout cho ListView 3) tranduythanh.com.activity –> dùng để lưu trữ Activity - Bây ta vào package : tranduythanh.com.model : - Package có class enum chức vụ (thực enum class đặc biệt) - Coding enum ChucVu.java: 10 11 12 13 14 15 16 17 18 19 20 21 22 package tranduythanh.com.model; /** * Enum để thiết lập chức vụ cho nhân viên * @author drthanh * */ public enum ChucVu { //Muốn gán này: TruongPhong("Trưởng Phòng") //thì phải có constructor ChucVu(String cv) TruongPhong("Trưởng Phòng"), PhoPhong("Phó Phòng"), NhanVien("Nhân Viên"); private String cv; ChucVu(String cv) { this.cv=cv; } public String getChucVu() { return this.cv; } } Coding Infor.java: package tranduythanh.com.model; import java.io.Serializable; /** * Class để lưu mã tên class cha NhanVien * PhongBan Vì nhân viên hay phòng ban có mã 227 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 tên * @author drthanh * */ public class Infor implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String ma; private String ten; public Infor(String ma, String ten) { super(); this.ma = ma; this.ten = ten; } public Infor() { super(); } public String getMa() { return ma; } public void setMa(String ma) { this.ma = ma; } public String getTen() { return ten; } public void setTen(String ten) { this.ten = ten; } @Override public String toString() { // TODO Auto-generated method stub return this.ma+" - "+this.ten; } } - Coding NhanVien.java: 10 11 12 13 14 package tranduythanh.com.model; import java.io.Serializable; /** * Class lưu trữ thông tin nhân viên * @author drthanh * */ public class NhanVien extends Infor implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private boolean gioitinh; private ChucVu chucvu; 228 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 private PhongBan phongban; public NhanVien(String ma, String ten, boolean gioitinh, ChucVu chucvu, PhongBan phongban) { super(ma,ten); this.gioitinh = gioitinh; this.chucvu = chucvu; this.phongban = phongban; } public NhanVien(String ma, String ten, boolean gioitinh) { super(ma,ten); this.gioitinh = gioitinh; } public NhanVien() { super(); } public boolean isGioitinh() { return gioitinh; } public void setGioitinh(boolean gioitinh) { this.gioitinh = gioitinh; } public ChucVu getChucvu() { return chucvu; } public void setChucvu(ChucVu chucvu) { this.chucvu = chucvu; } public PhongBan getPhongban() { return phongban; } public void setPhongban(PhongBan phongban) { this.phongban = phongban; } @Override public String toString() { // TODO Auto-generated method stub return super.toString(); } } - Coding PhongBan.java: 10 11 package tranduythanh.com.model; import java.io.Serializable; import java.util.ArrayList; /** * Class để lưu thơng tin phòng ban * @author drthanh * */ public class PhongBan extends Infor implements Serializable{ 229 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 private static final long serialVersionUID = 1L; private ArrayListdsnv=new ArrayList(); public PhongBan(String ma, String ten) { super(ma,ten); } public PhongBan() { super(); } /** * Hàm cho phép thêm nhân viên * nhân viên có mã tồn * tự động trở thành cập nhật * @param nv */ public void themNv(NhanVien nv) { int i=0; for(;igetPhoPhong() { ArrayList dsPhoPhong=new ArrayList(); for(NhanVien nv: dsnv) { if(nv.getChucvu()==ChucVu.PhoPhong) dsPhoPhong.add(nv); } return dsPhoPhong; } public ArrayList getListNhanVien() { return this.dsnv; } @Override public String toString() { // TODO Auto-generated method stub String str=super.toString(); if(dsnv.size()==0) str+="(Chưa có NV)"; else str+="(có "+dsnv.size()+" NV)"; return str; } } - Bây ta qua package tranduythanh.com.adapter: - Adapter dùng để custom layout cho danh sách Phòng ban danh sách nhân viên - Chú ý Adapter dùng chung Layout tên “layout_item_custom.xml“: - Bạn xem source XML ”layout_item_custom.xml“: 231 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 - Bây ta xem cách custom layout thông qua ADapter (phần customlayout Tôi hướng dẫn tập trước, bạn tự xem lại): - Coding PhongBanAdapter.java: 10 11 12 13 14 15 16 package tranduythanh.com.adapter; import java.util.ArrayList; import tranduythanh.com.activity.R; import tranduythanh.com.model.NhanVien; import tranduythanh.com.model.PhongBan; import android.app.Activity; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; /** * Class dùng để custom layout cho Danh sách phòng ban * @author drthanh * 232 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 */ public class PhongBanAdapter extends ArrayAdapter { Activity context; int layoutId; ArrayList arrPhongBan; public PhongBanAdapter(Activity context, int textViewResourceId, ArrayList objects) { super(context, textViewResourceId, objects); this.context=context; this.layoutId=textViewResourceId; this.arrPhongBan=objects; } @Override public View getView(int position, View convertView, ViewGroup parent) { //gán layout vào coding convertView=context.getLayoutInflater().inflate(layoutId, null); //lấy control theo id TextView txtpb= (TextView) convertView.findViewById(R.id.txtShortInfor); TextView txtmotapb= (TextView) convertView.findViewById(R.id.txtDetailInfor); //Lấy phòng ban thứ position PhongBan pb=arrPhongBan.get(position); txtpb.setText(pb.toString()); /** * Các Dòng lệnh để kiểm tra Trưởng phòng, phó phòng */ String strMota=""; String tp="Trưởng Phòng: [Chưa có]"; NhanVien nv=pb.getTruongPhong(); if(nv!=null) { tp="Trưởng Phòng: ["+nv.getTen()+"]"; } ArrayList dsPp=pb.getPhoPhong(); String pp="Phó phòng: [Chưa có]"; if(dsPp.size()>0) { pp="Phó phòng:\n"; for(int i=0;i { Activity context; int layoutId; ArrayList arrNhanVien; public NhanVienAdapter(Activity context, int textViewResourceId, ArrayList objects) { super(context, textViewResourceId, objects); this.context=context; this.layoutId=textViewResourceId; this.arrNhanVien=objects; } @Override public View getView(int position, View convertView, ViewGroup parent) { //gán XML layout vào coding convertView=context.getLayoutInflater().inflate(layoutId, null); //lấy control TextView txtnv= (TextView) convertView.findViewById(R.id.txtShortInfor); TextView txtmotanv= (TextView) convertView.findViewById(R.id.txtDetailInfor); ImageView img=(ImageView) convertView.findViewById(R.id.imgview); //lấy nhân viên thứ position NhanVien nv=arrNhanVien.get(position); txtnv.setText(nv.toString()); String strMota=""; String cv="Chức vụ: "+nv.getChucvu().getChucVu(); String gt="Giới tính: "+(nv.isGioitinh()?"Nữ":"Nam"); //Kiểm tra giới tính để gán cho hình đại diện img.setImageResource(R.drawable.girlicon); 234 52 53 54 if(!nv.isGioitinh()) img.setImageResource(R.drawable.boyicon); strMota=cv+"\n"+gt; txtmotanv.setText(strMota); return convertView; } } - Bây ta qua package tranduythanh.com.activity: - Ta vào hình theo thứ tự - Màn hình (MainActivity.java): - Bạn xem Outline hình chính: - Đây XML source MainActivity: - Ta xem xử lý coding MainActivity: 10 11 12 13 package tranduythanh.com.activity; import java.util.ArrayList; import tranduythanh.com.activity.R; import tranduythanh.com.adapter.PhongBanAdapter; import tranduythanh.com.model.ChucVu; import tranduythanh.com.model.NhanVien; import tranduythanh.com.model.PhongBan; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; 237 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; /** * Class MainActivity ứng dụng * @author drthanh * */ public class MainActivity extends Activity { //Khai báo Request + Result code để xử lý Intent for result public static final int MO_ACTIVITY_THEM_NHAN_VIEN=1; public static final int MO_ACTIVITY_SUA_NHAN_VIEN=2; public static final int THEM_NHAN_VIEN_THANHCONG=3; public static final int SUA_NHAN_VIEN_THANHCONG=4; public static final int XEM_DS_NHAN_VIEN=5; public static final int CAPNHAT_DS_NHAN_VIEN_THANHCONG=6; public static final int MO_ACTIVITY_THIET_LAP_TP_PP=7; public static final int THIET_LAP_TP_PP_THANHCONG=8; public static final int MO_ACTIVITY_CHUYENPHONG=9; public static final int CHUYENPHONG_THANHCONG=10; private Button btnLuuPb; private EditText editMapb,editTenpb; private ListView lvpb; private static ArrayListarrPhongBan=new ArrayList(); //ở dùng PhongBanAdapter private PhongBanAdapter adapterPb=null; private PhongBan pbSelected=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getFormWidgets(); addEvents(); fakeData(); } /** * Hàm dùng để tải liệu tạm (đỡ phải nhập mỏi tay) * Tơi dùng hàm để ví dụ cho lẹ * bạn xóa (nói chung vơ thưởng vô phạt) */ public void fakeData() { NhanVien nv=null; PhongBan pb=new PhongBan("pb1", "Kỹ thuật"); 238 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 nv=new NhanVien("m4", "Đoàn Ái Nương", true); nv.setChucvu(ChucVu.TruongPhong); pb.themNv(nv); nv=new NhanVien("m5", "Trần Đạo Đức", false); nv.setChucvu(ChucVu.PhoPhong); pb.themNv(nv); nv=new NhanVien("m6", "Nguyễn Đại Tài", false); nv.setChucvu(ChucVu.PhoPhong); pb.themNv(nv); arrPhongBan.add(pb); pb=new PhongBan("pb2", "Dịch vụ"); arrPhongBan.add(pb); pb=new PhongBan("pb3", "Truyền thông"); arrPhongBan.add(pb); nv=new NhanVien("m1", "Nguyễn Văn Tẻo", false); nv.setChucvu(ChucVu.NhanVien); pb.themNv(nv); nv=new NhanVien("m2", "Nguyễn Thị Téo", true); nv.setChucvu(ChucVu.TruongPhong); pb.themNv(nv); nv=new NhanVien("m3", "Nguyễn Văn Teo", false); nv.setChucvu(ChucVu.NhanVien); pb.themNv(nv); adapterPb.notifyDataSetChanged(); } /** * - Hàm để load control theo Id * - Thiết lập Adapter cho ListView phòng ban * - thiết lập context Menu cho ListView */ public void getFormWidgets() { btnLuuPb=(Button) findViewById(R.id.btnluupb); editMapb=(EditText) findViewById(R.id.editmapb); editTenpb=(EditText) findViewById(R.id.editTenpb); lvpb=(ListView) findViewById(R.id.lvphongban); //khởi tạo đối tượng phòng ban adapter //dùng layout_item_custom.xml adapterPb=new PhongBanAdapter(this, R.layout.layout_item_custom, arrPhongBan); lvpb.setAdapter(adapterPb); //Đăng ký contextmenu cho Listview registerForContextMenu(lvpb); } /** * hàm gán kiện cho control: button, ListView */ public void addEvents() { //Bấm lưu để lưu phòng ban btnLuuPb.setOnClickListener(new OnClickListener() { @Override 239 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 public void onClick(View arg0) { // TODO Auto-generated method stub doLuuPhongBan(); } }); //xử lý lưu biến tạm nhấn long - click //phải dùng để biết trước chọn item lvpb.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView arg0, View arg1, int arg2, long arg3) { //lưu vết lại đối tượng thứ arg2 danh sách pbSelected=arrPhongBan.get(arg2); return false; } }); } /** * hàm xử lý lưu phòng ban * đơn đưa phòng ban vào ArrayList * ý bạn phải kiểm tra trùng lắp Id, hay * thông tin đầy đủ chưa * gọi adapterPb.notifyDataSetChanged(); để cập nhật ListView */ public void doLuuPhongBan() { String mapb=editMapb.getText()+""; String tenpb=editTenpb.getText()+""; PhongBan pb=new PhongBan(mapb, tenpb); arrPhongBan.add(pb); adapterPb.notifyDataSetChanged(); } /** * hàm để gán COntextMenu vào ứng dụng * học từ lâu rồi, phải tự hiểu */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.contextmenu_phongban, menu); } /** * hàm để xử lý người sử dụng vừa chọn menuitem * ta dựa vào Id để xử lý */ @Override public boolean onContextItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.mnuthemnv: doThemNhanVien(); 240 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 break; case R.id.mnudanhsachnv: doDanhSachNhanVien(); break; case R.id.mnutruongphong: doThietLapLanhDao(); break; case R.id.mnuxoapb: doXoaPhongBan(); break; } return super.onContextItemSelected(item); } /** * chọn menu Thêm nhân viên, đơn hiển thị * hìn thêm nhân viên (với dạng Dialog) * nhớ dùng startActivityForResult * ta lắng nghe kết hàm onActivityResult */ public void doThemNhanVien() { Intent i=new Intent(this, ThemNhanVienActivity.class); startActivityForResult(i, MO_ACTIVITY_THEM_NHAN_VIEN); } /** * hàm onActivityResult để xử lý kết trả * sau gọi startActivityForResult kết thúc */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); //màn hình thêm nhân viên trả kết if(resultCode==THEM_NHAN_VIEN_THANHCONG) { //Cách lấy liệu học rồi, ko nói lại Bundle bundle= data.getBundleExtra("DATA"); NhanVien nv= (NhanVien) bundle.getSerializable("NHANVIEN"); pbSelected.themNv(nv); adapterPb.notifyDataSetChanged(); } //Màn hình thiết lập lạnh đão/ cập nhật danh sách trả //kết else if(resultCode==THIET_LAP_TP_PP_THANHCONG|| resultCode==CAPNHAT_DS_NHAN_VIEN_THANHCONG) { //Cách lấy liệu học rồi, ko nói lại Bundle bundle= data.getBundleExtra("DATA"); PhongBan pb= (PhongBan) bundle.getSerializable("PHONGBAN"); //đơn xóa danh sách cũ pbSelected.getListNhanVien().clear(); //rồi cập nhật lại tồn danh sách //sinh viên chọn giải pháp thông minh //tức phần tử bị ảnh hưởng xử lý phần tử 241 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 pbSelected.getListNhanVien().addAll(pb.getListNhanVien()); adapterPb.notifyDataSetChanged(); } } /** * hàm cho phép danh xem danh sách nhân viên phòng * ban chọn, đơn mở DanhSachNhanVienActivity * truyền phòng ban qua >tồn danh sách nhân viên * hiển thị DanhSachNhanVienActivity */ public void doDanhSachNhanVien() { Intent i=new Intent(this, DanhSachNhanVienActivity.class); Bundle bundle=new Bundle(); bundle.putSerializable("PHONGBAN", pbSelected); i.putExtra("DATA", bundle); startActivityForResult(i, XEM_DS_NHAN_VIEN); } /** * hàm cho phép mở hình thiết lập lãnh đạo phòng ban * Trưởng phòng phó phòng * ThietLapTruongPhongActivity có ListView * - Listview hiển thị dang radiobutton để chọn trưởng phòng * - ListView hiển thị dạng Checkbox cho phép chọn nhiều phó phòng */ public void doThietLapLanhDao() { Intent i=new Intent(this, ThietLapTruongPhongActivity.class); Bundle bundle=new Bundle(); bundle.putSerializable("PHONGBAN", pbSelected); i.putExtra("DATA", bundle); startActivityForResult(i, MO_ACTIVITY_THIET_LAP_TP_PP); } /** * hàm cho phép xóa phòng ban chọn */ public void doXoaPhongBan() { AlertDialog.Builder builder=new AlertDialog.Builder (this); builder.setTitle("Hỏi xóa"); builder.setMessage("Bạn có chắn muốn xóa ["+pbSelected.getTen()+"]"); builder.setIcon(android.R.drawable.ic_input_delete); builder.setNegativeButton("Khơng", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub arg0.cancel(); } }); builder.setPositiveButton("Ừ", new 242 284 285 286 287 288 289 290 291 292 293 294 295 296 DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub arrPhongBan.remove(pbSelected); adapterPb.notifyDataSetChanged(); } }); builder.show(); } /** * Tơi cố tình cung cấp hàm để Activity khác * truy suất danh sách phòng ban tổng thể * @return */ public static ArrayList getListPhongBan() { return arrPhongBan; } } - Ta qua hình thêm nhân viên Chú ý hình bạn phải cấu hình mở dạng Dialog - xem layout: - Bạn xem XML source code hình này: 243 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 - Giờ ta xem xử lý coding cho phần thêm nhân viên (ThemNhanVienActivity): 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 package tranduythanh.com.activity; import tranduythanh.com.activity.R; import tranduythanh.com.model.ChucVu; import tranduythanh.com.model.NhanVien; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; /** * class cho phép thêm nhân viên vào * Phòng ban chọn * @author drthanh * */ public class ThemNhanVienActivity extends Activity { private Button btnXoaTrang,btnLuuNhanVien; private EditText editManv,editTenNv; private RadioButton radNam; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_them_nhan_vien); getFormWidgets(); addEvents(); } /** * hàm lấy control theo id */ public void getFormWidgets() { btnXoaTrang=(Button) findViewById(R.id.btnxoatrang); btnLuuNhanVien=(Button) findViewById(R.id.btnluunv); editManv=(EditText) findViewById(R.id.editMaNV); editTenNv=(EditText) findViewById(R.id.editTenNV); 246 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 radNam=(RadioButton) findViewById(R.id.radNam); } /** * hàm gán kiện */ public void addEvents() { btnXoaTrang.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub doXoaTrang(); } }); btnLuuNhanVien.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub doLuuNhanVien(); } }); } /** * đơn xóa trắng liệu control * focus tới mã */ public void doXoaTrang() { editManv.setText(""); editTenNv.setText(""); editManv.requestFocus(); } /** * hàm lưu nhân viên theo phòng ban * truyền nhân viên qua MainActivity * MainActivity có nhiệm vụ lấy nhân viên * đưa họ vào phòng ban chọn lúc */ public void doLuuNhanVien() { NhanVien nv=new NhanVien(); nv.setMa(editManv.getText()+""); nv.setTen(editTenNv.getText()+""); nv.setChucvu(ChucVu.NhanVien); nv.setGioitinh(! radNam.isChecked()); Intent i=getIntent(); Bundle bundle=new Bundle(); bundle.putSerializable("NHANVIEN", nv); i.putExtra("DATA", bundle); setResult(MainActivity.THEM_NHAN_VIEN_THANHCONG, i); finish(); } } 247 96 - Tiếp tục ta xem hình Xem danh sách nhân viên: - bạn xem outline: - Xem XML Resource activity_danh_sach_nhan_vien.xml: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 248 26 27 28 29 30 31 32 33 34 35 - Xem coding xử lý phần xem danh sách nhân viên (DanhSachNhanVienActivity) : - Class phức tạp, chứa Context menu phép: + Sửa nhân viên + Chuyển phòng ban cho nhân viên + Xóa nhân viên: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package tranduythanh.com.activity; import java.util.ArrayList; import tranduythanh.com.activity.R; import tranduythanh.com.adapter.NhanVienAdapter; import tranduythanh.com.model.NhanVien; import tranduythanh.com.model.PhongBan; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.ImageButton; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemLongClickListener; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; /** * class dùng để hiển thị danh sách nhân viên * Class phức tạp không MainActivity * nhớ dùng custom layout * - Hiển thị danh sách * - cho phép chỉnh sửa * - cho phép chuyển phòng ban * - cho phép xóa nhân viên * @author drthanh 249 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 * */ public class DanhSachNhanVienActivity extends Activity { TextView txtmsg; ImageButton btnback; ListView lvNhanvien; ArrayList arrNhanvien=null; //Nhân viên Adapter để hiển thị thông tin //và chi tiết : chức vụ, giới tính NhanVienAdapter adapter=null; PhongBan pb=null; private NhanVien nvSelected=null; private int position=-1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_danh_sach_nhan_vien); txtmsg=(TextView) findViewById(R.id.txtmsg); btnback=(ImageButton) findViewById(R.id.btnback); lvNhanvien=(ListView) findViewById(R.id.lvnhanvien); getDataFromMain(); addEvents(); registerForContextMenu(lvNhanvien); } /** * hàm lấy giá trị từ MainActivity * truyền phòng ban qua * bên lấy phòng ban dựa vào phòng ban * lấy danh sách nhân viên */ public void getDataFromMain() { Intent i=getIntent(); Bundle b=i.getBundleExtra("DATA"); pb= (PhongBan) b.getSerializable("PHONGBAN"); arrNhanvien=pb.getListNhanVien(); adapter=new NhanVienAdapter(this, R.layout.layout_item_custom, arrNhanvien); lvNhanvien.setAdapter(adapter); txtmsg.setText("DS nhân viên ["+pb.getTen()+"]"); } /** * hàm gán kiện (đã quen thuộc rồi) * có lưu vết lại nhân viên vừa chọn để xử lý * cho contextmenu */ public void addEvents() { btnback.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { doUpdateToMain(); 250 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 } }); lvNhanvien.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView arg0, View arg1, int arg2, long arg3) { nvSelected=arrNhanvien.get(arg2); position=arg2; return false; } }); } /** * hàm gán context menu(đã quen thuộc) */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.contextmenu_nhanvien, menu); } /** * hàm xử lý kiện chọn menuitem (đã quen thuộc quá) */ @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch(item.getItemId()) { case R.id.mnusuanv: doSuaNhanVien(); break; case R.id.mnuchuyenpb: doChuyenPhongBan(); break; case R.id.mnuxoanv: doXoaNhanVien(); break; } return super.onContextItemSelected(item); } /** * hàm onActivityResult xử lý kết trả * cho trường hợp xử dụng COntext Menu để mở * Activity khác */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { 251 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); //lấy kết sửa nhân viên thành công if(resultCode==MainActivity.SUA_NHAN_VIEN_THANHCONG) { Bundle b=data.getBundleExtra("DATA"); NhanVien nv= (NhanVien) b.getSerializable("NHANVIEN"); arrNhanvien.set(position, nv); adapter.notifyDataSetChanged(); } //lấy kết chuyển phòng ban thành cơng else if(resultCode==MainActivity.CHUYENPHONG_THANHCONG) { arrNhanvien.remove(nvSelected); adapter.notifyDataSetChanged(); } } /** * hàm sửa nhân viên * đơn giản mở Activity sửa nhân viên lên * truyền nhân viên chọn qua Activity * */ public void doSuaNhanVien() { Intent i=new Intent(this, SuaNhanVienActivity.class); Bundle b=new Bundle(); b.putSerializable("NHANVIEN", nvSelected); i.putExtra("DATA", b); startActivityForResult(i, MainActivity.MO_ACTIVITY_SUA_NHAN_VIEN); } /** * hàm chuyển phòng ban cho nhân viên chọn * đơn mở Activity chuyển phòng ban * Activity có nhiệm vụ hiển thị tồn phòng ban * cho phép người sử dụng chọn phòng ban để chuyển */ public void doChuyenPhongBan() { Intent i=new Intent(this, ChuyenPhongBanActivity.class); Bundle b=new Bundle(); b.putSerializable("NHANVIEN", nvSelected); i.putExtra("DATA", b); startActivityForResult(i, MainActivity.MO_ACTIVITY_CHUYENPHONG); } /** * hàm cho phép xóa nhân viên * (đã quen thuộc quá) */ public void doXoaNhanVien() { AlertDialog.Builder builder=new AlertDialog.Builder (this); builder.setTitle("Hỏi xóa"); 252 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 builder.setMessage("Bạn có chắn muốn xóa ["+nvSelected.getTen()+"]"); builder.setIcon(android.R.drawable.ic_input_delete); builder.setNegativeButton("Khơng", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub arg0.cancel(); } }); builder.setPositiveButton("Ừ", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub arrNhanvien.remove(nvSelected); adapter.notifyDataSetChanged(); } }); builder.show(); } /** * nhấn nút Back (hình back) * truyền thơng số MainActivity để cập nhật * phòng ban */ public void doUpdateToMain() { Intent i=getIntent(); Bundle b=new Bundle(); b.putSerializable("PHONGBAN", pb); i.putExtra("DATA", b); setResult(MainActivity.CAPNHAT_DS_NHAN_VIEN_THANHCONG, i); finish(); } } - Ta tiếp tục làm việc với hình sửa nhân viên, hình sử dụng chung Layout với hình thêm nhân viên Nên Tôi mô tả phần xử lý coding mà (SuaNhanVienActivity): 10 11 package tranduythanh.com.activity; import tranduythanh.com.model.NhanVien; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; 253 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 /** * class cho phép sửa nhân viên chọn Danhsachnhanvien * sử dụng chung Layout với Thêm nhân viên * Không cho sửa mã số nhân viên * bấm lưu cập nhật lại (rất đơn giản) * @author drthanh * */ public class SuaNhanVienActivity extends Activity{ EditText editMa,editTen; RadioButton radNam; Button btnClear,btnSave; NhanVien nv=null; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_them_nhan_vien); getFormWidgets(); getDefaultData(); addEvents(); } /** * hàm lấy control theo id */ public void getFormWidgets() { editMa=(EditText) findViewById(R.id.editMaNV); editTen=(EditText) findViewById(R.id.editTenNV); radNam=(RadioButton) findViewById(R.id.radNam); editMa.setEnabled(false); editTen.requestFocus(); btnClear=(Button) findViewById(R.id.btnxoatrang); btnSave=(Button) findViewById(R.id.btnluunv); } /** * hàm lấy giá trị từ DanhSachNhanVienActivity truyền qua * để hiển thị */ public void getDefaultData() { Intent i =getIntent(); Bundle b=i.getBundleExtra("DATA"); nv=(NhanVien) b.getSerializable("NHANVIEN"); editMa.setText(nv.getMa()); editTen.setText(nv.getTen()); radNam.setChecked(true); if(nv.isGioitinh()) radNam.setChecked(false); } public void addEvents() { btnClear.setOnClickListener(new OnClickListener() { 254 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 @Override public void onClick(View arg0) { // TODO Auto-generated method stub editTen.setText(""); editTen.requestFocus(); } }); /** * bấm lưu đóng cửa sổ sửa * truyền liệu qua hình cha để tự cập nhật */ btnSave.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent i =getIntent(); nv.setTen(editTen.getText()+""); nv.setGioitinh(!radNam.isChecked()); Bundle b=new Bundle(); b.putSerializable("NHANVIEN", nv); i.putExtra("DATA", b); setResult(MainActivity.SUA_NHAN_VIEN_THANHCONG, i); finish(); } }); } } - Ta qua hình chuyển phòng ban cho nhân viên: - Bạn xem layout XML: - Màn hình hình hình Xem danh sách nhân nhiên (lúc dùng Context Menu) 255 - Khi chọn nhân viên tiến hành mở hình chuyển phòng ban cho nhân viên - xem XML Resource: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 - Bạn xem xử lý coding cho phần chuyển phòng ban: 10 11 12 13 package tranduythanh.com.activity; import java.util.ArrayList; import tranduythanh.com.model.NhanVien; import tranduythanh.com.model.PhongBan; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; 256 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 import android.widget.ArrayAdapter; import android.widget.CheckedTextView; import android.widget.ImageButton; import android.widget.ListView; /** * Class dùng để xử lý chuyển phòng ban cho nhân viên * @author drthanh * */ public class ChuyenPhongBanActivity extends Activity { ListView lvPb; private static ArrayListarrPhongBan=null; ArrayAdapteradapter; ImageButton btnApply; NhanVien nv=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chuyen_phong_ban); getFormWidgets(); //lấy nhân viên từ hình xem danh sách nhân viên Intent i=getIntent(); Bundle b= i.getBundleExtra("DATA"); nv=(NhanVien) b.getSerializable("NHANVIEN"); } /** * hàm lấy control theo id * đồng thời load tồn danh sách phòng ban MainActivity * lên ListView để sử dụng * android.R.layout.simple_list_item_single_choice ->dùng Radio * Bắt buộc phải xử lý hàm: lvPb.setOnItemClickListener * để gán checked cho Radio */ public void getFormWidgets() { lvPb=(ListView) findViewById(R.id.lvphongban); btnApply=(ImageButton) findViewById(R.id.imgapply); arrPhongBan=MainActivity.getListPhongBan(); adapter=new ArrayAdapter (this, android.R.layout.simple_list_item_single_choice, arrPhongBan); lvPb.setAdapter(adapter); lvPb.setOnItemClickListener(new OnItemClickListener() { boolean somethingChecked = false; @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { //hiển nhiên View arg1 CheckedTextView if(somethingChecked) { CheckedTextView cv = (CheckedTextView) arg1; 257 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 cv.setChecked(false); } CheckedTextView cv = (CheckedTextView) arg1; if(!cv.isChecked()) { cv.setChecked(true); arrPhongBan.get(arg2).themNv(nv); } somethingChecked=true; } }); //khi chọn nút Apply tiến hành đóng hình //và truyền lệnh cho DanhSachNhanVienACtivity btnApply.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { doApply(); } }); } public void doApply() { setResult(MainActivity.CHUYENPHONG_THANHCONG); finish(); } } - Ta qua hình cuối cùng: Thiết lập trưởng phó phòng cho nhân viên - Màn hình hình MainActivity - Khi chọn phòng ban thiết lập trưởng phó phòng cho phòng ban - xem Layout (activity_thiet_lap_truong_phong.xml): 258 - Xem XML resource: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 - xem xử lý coding: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 package tranduythanh.com.activity; import java.util.ArrayList; import tranduythanh.com.activity.R; import tranduythanh.com.model.ChucVu; import tranduythanh.com.model.NhanVien; import tranduythanh.com.model.PhongBan; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.CheckedTextView; import android.widget.ImageButton; import android.widget.ListView; import android.app.Activity; import android.content.Intent; /** * hình hiển thị danh sách nhân viên vào ListView khác * ListView dùng Radio để chọn trưởng phòng * ListView dùng Checkbox để chọn phó phòng * @author drthanh * */ public class ThietLapTruongPhongActivity extends Activity { ListView lvtruongphong,lvphophong; ArrayListarrNvForTP=new ArrayList(); 260 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 ArrayAdapter adapterForTP; ArrayListarrNvForPP=new ArrayList(); ArrayAdapter adapterForPP; ImageButton btnApply; int lastChecked=-1; PhongBan pb=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_thiet_lap_truong_phong); getFormWidgets(); } /** * hàm lấy control theo id * xử lý kiện checked (chọn chức vụ cho nhân viên) * Mọi thứ hướng đối tượng nên tự tham chiếu */ public void getFormWidgets() { lvtruongphong=(ListView) findViewById(R.id.lvtruongphong); lvtruongphong.setTextFilterEnabled(true); lvtruongphong.setChoiceMode(ListView.CHOICE_MODE_SINGLE); lvtruongphong.setOnItemClickListener(new OnItemClickListener() { boolean somethingChecked = false; @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { arrNvForTP.get(arg2).setChucvu(ChucVu.TruongPhong); if(somethingChecked){ CheckedTextView cv = (CheckedTextView) arg1; cv.setChecked(false); } CheckedTextView cv = (CheckedTextView) arg1; if(!cv.isChecked()) { cv.setChecked(true); arrNvForTP.get(arg2).setChucvu(ChucVu.TruongPhong); } else { arrNvForTP.get(arg2).setChucvu(ChucVu.NhanVien); } lastChecked = arg2; somethingChecked=true; } }); lvphophong=(ListView) findViewById(R.id.lvphophong); lvphophong.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, 261 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 long arg3) { CheckedTextView cv = (CheckedTextView) arg1; if(!cv.isChecked()) {cv.setChecked(true); arrNvForPP.get(arg2).setChucvu(ChucVu.PhoPhong); } else {cv.setChecked(false); arrNvForPP.get(arg2).setChucvu(ChucVu.NhanVien); } } }); adapterForTP=new ArrayAdapter(this, android.R.layout.simple_list_item_single_choice, arrNvForTP); adapterForPP=new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, arrNvForPP); lvtruongphong.setAdapter(adapterForTP); lvphophong.setAdapter(adapterForPP); //Lấy phòng ban gửi qua từ MainActivity Intent i= getIntent(); Bundle bundle= i.getBundleExtra("DATA"); pb= (PhongBan) bundle.getSerializable("PHONGBAN"); addNvToListTP(pb); addNvToListPP(pb); adapterForTP.notifyDataSetChanged(); adapterForPP.notifyDataSetChanged(); btnApply=(ImageButton) findViewById(R.id.imgapply); btnApply.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { doApply(); } }); } /** * gửi thông tin lại Mainactivity sau thiết lập */ public void doApply() { Intent i=getIntent(); Bundle bundle=new Bundle(); bundle.putSerializable("PHONGBAN", pb); i.putExtra("DATA", bundle); setResult(MainActivity.THIET_LAP_TP_PP_THANHCONG, i); finish(); } /** * duyệt toàn nhân viên vào danh sách ứng viên Trưởng phòng 262 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 * @param pb */ public void addNvToListTP(PhongBan pb) { arrNvForTP.clear(); for(NhanVien nv:pb.getListNhanVien()) { arrNvForTP.add(nv); } } /** * duyệt toàn nhân viên vào danh sách ứng viên phó phòng * @param pb */ public void addNvToListPP(PhongBan pb) { arrNvForPP.clear(); for(NhanVien nv:pb.getListNhanVien()) { arrNvForPP.add(nv); } } } - Như Tôi trình bày xong ví dụ 25 - Bài tập khó phức tạp, bạn phải đọc đọc lại làm làm lại - Nếu tập bạn hiểu coi bạn hiểu phần lớn Intent biết cách ứng dụng - Bạn tải coding mẫu tồn đây:http://www.mediafire.com/?x8yyy2rewwcf9su - Bài tập sau Tơi có thêm ví dụ implicit intent (cũng intent) Mục đích ví dụ Tơi viết chương trình gọi điện thoại nhắn tin sms (không sử dụng chương trình có sẵn Android) ... 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278... bạn thấy Màn hình xem danh sách nhân viên có chức sau: 220 + Nút mũi tên “BacK” cho phép trở hình +Nhân viên có hình theo giới tính (nam, nữ) + Nhân viên có mơ tả: Chức vụ, giới tình + Vậy ta phải... builder.setTitle("Hỏi xóa"); 252 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 builder.setMessage("Bạn có chắn muốn xóa