Bài 25 : Củng Cố Kiến Thức Intent Qua Ví Dụ Quản Lý Nhân Viên (P9)

Leave a Comment
- Tiếp tục ta xem màn hình Xem danh sách nhân viên:
- bạn xem outline:
25_intent_24


- Xem XML Resource của activity_danh_sach_nhan_vien.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/LinearLayout1"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".DanhSachNhanVienActivity" >

<LinearLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content" >

<ImageButton
 android:id="@+id/btnback"
 android:layout_width="16dp"
 android:layout_height="16dp"
 android:contentDescription="TODO"
 android:src="@drawable/back" />

<TextView
 android:id="@+id/txtmsg"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:background="#008000"
 android:textColor="#FFFFFF" />

</LinearLayout>

<ListView
 android:id="@+id/lvnhanvien"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" >
 </ListView>

</LinearLayout>
- Xem coding xử lý phần xem danh sách nhân viên (DanhSachNhanVienActivity) :

- Class này rất phức tạp, nó còn chứa Context menu để cho phép:

+ Sửa nhân viên

+ Chuyển phòng ban cho nhân viên

+ Xóa nhân viên:
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 này dùng để hiển thị danh sách nhân viên
 * Class này cũng phức tạp không kém MainActivity
 * nhớ là 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
 *
 */
public class DanhSachNhanVienActivity extends Activity {

TextView txtmsg;
 ImageButton btnback;
 ListView lvNhanvien;
 ArrayList<NhanVien> 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
 * sẽ truyền phòng ban qua
 * bên này lấy phòng ban và dựa vào phòng ban này
 * lấy ra 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 sự kiện (đã quá 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();
 }
 });
 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(đã quá 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ý sự 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 quả trả về
 * cho trường hợp xử dụng COntext Menu để mở các
 * Activity khác
 */
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 // TODO Auto-generated method stub
 super.onActivityResult(requestCode, resultCode, data);
 //lấy kết quả 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 quả 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 là mở Activity sửa nhân viên lên
 * rồi truyền nhân viên đang 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 đang chọn
 * đơn thuần là mở Activity chuyển phòng ban
 * Activity này có nhiệm vụ hiển thị toàn bộ phòng ban
 * rồi 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 hiện tại
 * (đã quen thuộc quá)
 */
 public void doXoaNhanVien()
 {
 AlertDialog.Builder builder=new AlertDialog.Builder (this);
 builder.setTitle("Hỏi xóa");
 builder.setMessage("Bạn có chắ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();
 }
 /**
 * khi nhấn nút Back (hình back)
 * thì truyền thông số về 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 màn hình sửa nhân viên, vì màn hình này sử dụng chung Layout với màn hình thêm nhân viên. Nên Tôi chỉ mô tả phần xử lý coding mà thôi (SuaNhanVienActivity):
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;
/**
 * class này cho phép sửa nhân viên được chọn trong 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
 * khi bấm lưu thì 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 các 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() {

 @Override
 public void onClick(View arg0) {
 // TODO Auto-generated method stub
 editTen.setText("");
 editTen.requestFocus();
 }
 });
 /**
 * bấm lưu thì đóng cửa sổ sửa này
 * và truyền dữ liệu qua màn hình cha để nó 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();
 }
 });
 }
}
Xem tiếp P10

0 nhận xét:

Đăng nhận xét