- Layout main này chính là giao diện chính của ứng dụng.
- Dưới đây là các class hỗ trợ xử lý nghiệp vụ:
- Class MyArrayAdapter kế thừa từ ArrayAdapter, mục đích của nó là giúp chúng ta Custom lại layout cho ListView.
- Cuối cùng MainActivity.
- Bây giờ ta vào chi tiết từng class:
1) class Employee:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| package tranduythanh.com;public class Employee { private String id; private String name; private boolean gender; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isGender() { return gender; } public void setGender(boolean gender) { this.gender = gender; } @Override public String toString() { return this.id+"-"+this.name; }} |
2) class MyArrayAdapter:
1
2
3
4
5
6
7
8
9
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
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
| package tranduythanh.com;import java.util.ArrayList;import android.app.Activity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;public class MyArrayAdapter extends ArrayAdapter<Employee>{ Activity context=null; ArrayList<Employee>myArray=null; int layoutId; /** * Constructor này dùng để khởi tạo các giá trị * từ MainActivity truyền vào * @param context : là Activity từ Main * @param layoutId: Là layout custom do ta tạo (my_item_layout.xml) * @param arr : Danh sách nhân viên truyền từ Main */ public MyArrayAdapter(Activity context, int layoutId, ArrayList<Employee>arr){ super(context, layoutId, arr); this.context=context; this.layoutId=layoutId; this.myArray=arr; } /** * hàm dùng để custom layout, ta phải override lại hàm này * từ MainActivity truyền vào * @param position : là vị trí của phần tử trong danh sách nhân viên * @param convertView: convertView, dùng nó để xử lý Item * @param parent : Danh sách nhân viên truyền từ Main * @return View: trả về chính convertView */ public View getView(int position, View convertView, ViewGroup parent) { /** * bạn chú ý là ở đây Tôi không làm: * if(convertView==null) * { * LayoutInflater inflater= * context.getLayoutInflater(); * convertView=inflater.inflate(layoutId, null); * } * Lý do là ta phải xử lý xóa phần tử Checked, nếu dùng If thì * nó lại checked cho các phần tử khác sau khi xóa vì convertView * lưu lại trạng thái trước đó */ LayoutInflater inflater= context.getLayoutInflater(); convertView=inflater.inflate(layoutId, null); //chỉ là test thôi, bạn có thể bỏ If đi if(myArray.size()>0 && position>=0) { //dòng lệnh lấy TextView ra để hiển thị Mã và tên lên final TextView txtdisplay=(TextView) convertView.findViewById(R.id.txtitem); //lấy ra nhân viên thứ position final Employee emp=myArray.get(position); //đưa thông tin lên TextView //emp.toString() sẽ trả về Id và Name txtdisplay.setText(emp.toString()); //lấy ImageView ra để thiết lập hình ảnh cho đúng final ImageView imgitem=(ImageView) convertView.findViewById(R.id.imgitem); //nếu là Nữ thì lấy hình con gái if(emp.isGender()) imgitem.setImageResource(R.drawable.girlicon); else//nếu là Nam thì lấy hình con trai imgitem.setImageResource(R.drawable.boyicon ); } //Vì View là Object là dạng tham chiếu đối tượng, nên //mọi sự thay đổi của các object bên trong convertView //thì nó cũng biết sự thay đổi đó return convertView;//trả về View này, tức là trả luôn //về các thông số mới mà ta vừa thay đổi }} |
- Đây là class quan trọng nhất, mới nhất; dùng để custom layout.
3) class MainActivity:
1
2
3
4
5
6
7
8
9
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
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
96
97
98
99
100
101
102
103
104
105
106
107
108
| package tranduythanh.com;import java.util.ArrayList;import android.os.Bundle;import android.app.Activity;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.ImageButton;import android.widget.ListView;import android.widget.RadioGroup;public class MainActivity extends Activity {ArrayList<Employee>arrEmployee=new ArrayList<Employee>(); //Sử dụng MyArrayAdapter thay thì ArrayAdapter MyArrayAdapter adapter=null; ListView lvNhanvien=null; Button btnNhap; ImageButton btnRemoveAll; EditText editMa,editTen; RadioGroup genderGroup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnNhap=(Button) findViewById(R.id.btnNhap); btnRemoveAll=(ImageButton) findViewById(R.id.btndelete); editMa=(EditText) findViewById(R.id.editMa); editTen=(EditText) findViewById(R.id.editTen); genderGroup=(RadioGroup) findViewById(R.id.radioGroup1); lvNhanvien=(ListView) findViewById(R.id.lvnhanvien); arrEmployee=new ArrayList<Employee>(); //Khởi tạo đối tượng adapter và gán Data source adapter=new MyArrayAdapter( this, R.layout.my_item_layout,// lấy custom layout arrEmployee/*thiết lập data source*/); lvNhanvien.setAdapter(adapter);//gán Adapter vào Lisview btnNhap.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub xulyNhap(); } }); btnRemoveAll.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { xulyXoa(); } }); } //gọi hàm xử lý nhập thông tin nhân viên public void xulyNhap() { String ma=editMa.getText()+""; String ten=editTen.getText()+""; boolean gioitinh=false;//Nam =false if(genderGroup.getCheckedRadioButtonId()==R.id.radNu) gioitinh=true; //Tạo một employee Employee emp=new Employee(); emp.setId(ma); emp.setName(ten); emp.setGender(gioitinh); //Đưa vào danh sách arrEmployee.add(emp); //gọi hàm cập nhật giao diện adapter.notifyDataSetChanged(); //Sau khi update thì xóa trắng dữ liệu và cho editma focus editMa.setText(""); editTen.setText(""); editMa.requestFocus(); } //hàm xử lý xóa public void xulyXoa() { //ta nên đi ngược danh sách, kiểm tra phần tử nào checked //thì xóa đúng vị trí đó ra khỏi arrEmployee for(int i=lvNhanvien.getChildCount()-1;i>=0;i--) { //lấy ra dòng thứ i trong ListView //Dòng thứ i sẽ có 3 phần tử: ImageView, TextView, Checkbox View v=lvNhanvien.getChildAt(i); //Ta chỉ lấy CheckBox ra kiểm tra CheckBox chk=(CheckBox) v.findViewById(R.id.chkitem); //Nếu nó Checked thì xóa ra khỏi arrEmployee if(chk.isChecked()) { //xóa phần tử thứ i ra khỏi danh sách arrEmployee.remove(i); } } //Sau khi xóa xong thì gọi update giao diện adapter.notifyDataSetChanged(); }} |
- Bây giờ bạn thực hiện chương trình và nhập một số nhân viên, rồi checked rồi nhấn xóa:
Xem tiếp p2
0 nhận xét:
Đăng nhận xét