Học lập trình android - Control ListView trong android 2
Khóa học lập trình Android cơ bản tại ITP Việt Nam là khóa học cung cấp những kiến thức cơ bản và nâng cao về lập trình ứng dụng android, mở ra cho các bạn học viên một sự lựa chọn cơ hội việc làm mới.Ở bài trước, chúng ta đã tìm hiều về một phần về những trường hợp sử dụng Control ListView, với bài viết hôm nay chúng ta sẽ hoàn thiện kiến thức của bài hôm trước.
4. Sử dụng ArrayList và ListView nhưng từng phần tử trong ArrayList là các Object bất kỳ
Hiển thị danh sách nhân việ theo sơ đồ sau:
– Có 2 loại nhân viên : Nhân viên chính thức (EmployeeFullTime ) và nhân viên thời vụ (EmployeePartime).
– Mỗi nhân viên sẽ có cách tính lương khác nhau (tên phương thức tính lương giống nhau)
– Mỗi nhân viên có phương thức toString để xuất thông tin, Nội dung xuất khác nhau. Thêm FullTime đằng sau Id và Name đối với nhân viên chính thức. Thêm Partime đằng sau Id và Name đối với nhân viên thời vụ.
– Xem giao diện chương trình:
– Tạo một Android Project tên: Vidu_ListView_ArrayList_Object, cấu trúc như bên dưới:
– Layout XML (activity_main.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=”.MainActivity” >
<TextView
android:id=”@+id/textView1″ android:layout_width=”match_parent”
android:layout_height=”wrap_content” android:background=”#008000″
android:gravity=”center”
android:text=”Quản lý nhân viên” android:textColor=”#FFFFFF”
android:textSize=”20sp” />
<TableLayout
android:layout_width=”match_parent” android:stretchColumns=”*”
android:layout_height=”wrap_content” >
<TableRow
android:id=”@+id/tableRow1″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” >
<TextView
android:id=”@+id/textView2″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:text=”Mã NV:” />
<EditText
android:id=”@+id/editMa” android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:layout_span=”2″
android:ems=”10″ > <requestFocus />
</EditText>
</TableRow>
<TableRow
android:id=”@+id/tableRow2″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” >
<TextView
android:id=”@+id/textView3″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:text=”Tên NV:” />
<EditText
android:id=”@+id/editTen” android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:layout_span=”2″
android:ems=”10″ /> </TableRow>
<TableRow
android:id=”@+id/tableRow3″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” >
<TextView
android:id=”@+id/textView4″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:text=”Loại NV:” />
<RadioGroup
android:id=”@+id/radiogroud1″ android:orientation=”horizontal” >
<RadioButton
android:id=”@+id/radChinhthuc” android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:checked=”true” android:text=”Chính thức” />
<RadioButton
android:id=”@+id/radThoivu” android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:text=”Thời vụ” />
</RadioGroup> </TableRow>
<TableRow
android:id=”@+id/tableRow4″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” >
<Button
android:id=”@+id/btnnhap” android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:layout_column=”1″ android:text=”Nhập NV” />
</TableRow> </TableLayout>
<TextView
android:id=”@+id/textView5″ android:layout_width=”match_parent”
android:layout_height=”wrap_content” android:background=”#008000″ />
<ListView
android:id=”@+id/lvnhanvien” android:layout_width=”match_parent”
android:layout_height=”wrap_content” >
</ListView> </LinearLayout>
Xây dựng các class:
– Abstract class Employee:
package tranduythanh.com;
public abstract class Employee {
private String id; private String name;
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 abstract double TinhLuong();
@Override public String toString() {
// TODO Auto-generated method stub
return this.id+” – “+this.name;
}}
– class EmployeeFullTime:
package tranduythanh.com;
public class EmployeeFullTime extends Employee {
@Override public double TinhLuong() { return 500; }
@Override public String toString() {
// TODO Auto-generated method stub
return super.toString() +” –>FullTime=”+TinhLuong();
}}
– Class EmployeePartTime:
package tranduythanh.com;
public class EmployeePartTime extends Employee {
@Override public double TinhLuong() {
// TODO Auto-generated method stub
return 150;
}
@Override public String toString() {
// TODO Auto-generated method stub
return super.toString() +” –>PartTime=”+TinhLuong();
}}
Ở đây ta sẽ áp dụng tính đa hình thông qua thừa kế, chỉ cần dùng một biến có kiểu Employee, nhưng nó có thể hiểu FullTime hoặc Partime và xuất ra thông tin đúng như mình mong đợi.
Coding ở class MainActivity.java:
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.ArrayAdapter;
import android.widget.Button; import android.widget.EditText;
import android.widget.ListView; import android.widget.RadioGroup;
public class MainActivity extends Activity {
EditText editId,editName; Button btnNhap; RadioGroup radgroup; ListView lvNhanvien;
ArrayList<Employee>arrEmployee=new ArrayList<Employee>();
ArrayAdapter<Employee>adapter=null;
//Khai báo 1 employee object
Employee employee=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
editId=(EditText) findViewById(R.id.editMa); editName=(EditText) findViewById(R.id.editTen);
btnNhap=(Button) findViewById(R.id.btnnhap); radgroup=(RadioGroup) findViewById(R.id.radiogroud1);
lvNhanvien=(ListView) findViewById(R.id.lvnhanvien);
//đưa Data Source là các employee vào Adapter
adapter=new ArrayAdapter<Employee>(this, android.R.layout.simple_list_item_1, arrEmployee);
lvNhanvien.setAdapter(adapter); //đưa adapter vào ListView
btnNhap.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
processNhap();
} });
}
//Xử lý sự kiện nhập
public void processNhap()
{ //Lấy ra đúng id của Radio Button được checked
int radId=radgroup.getCheckedRadioButtonId();
String id=editId.getText()+””;
String name=editName.getText()+””;
if(radId==R.id.radChinhthuc)
{ //tạo instance là FullTime
employee=new EmployeeFullTime();
}
else
{ //Tạo instance là Partime
employee=new EmployeePartTime();
}
//FullTime hay Partime thì cũng là Employee nên có các hàm này là hiển nhiên
employee.setId(id);
employee.setName(name);
//Đưa employee vào ArrayList
arrEmployee.add(employee);
//Cập nhập giao diện
adapter.notifyDataSetChanged();
}}
5. Sử dụng ListView nhưng dưới dạng ListActivity:
Trong trường hợp này chúng ta sẽ không cho kế thừa từ Activity nữa mà chuyển sang kế thừa từ ListActivity. Với sự kế thừa này chúng ta sẽ có cách đặt Id ccho ListView khác.
Xem giao diện:
Với giao diện trên thì chúng ta có cách làm XML layout sau:
<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=”.MainActivity” >
<TextView
android:id=”@+id/selection” android:layout_width=”match_parent”
android:layout_height=”wrap_content” android:background=”#008000″
android:textColor=”#FFFFFF” android:textSize=”20sp” />
<ListView
android:id=”@android:id/list” android:layout_width=”match_parent”
android:layout_height=”wrap_content” >
</ListView>
<TextView
android:id=”@android:id/empty” android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:text=”Không có gì cả” />
</LinearLayout>
Trong đoạn lệnh này thì dòng lệnh 18: android:id=”@android:id/list“ và dòng lệnh 24: android:id=”@android:id/empty“ là những lệnh được định nghĩa sẵn trong android, dùng để định nghĩa một id và tự động thông báo khi ListView không có bất kì một phần tử nào.
Bây giờ chúng ta sẽ xét class MainActivity.java:
package tranduythanh.com;
import android.os.Bundle; import android.app.ListActivity;
import android.view.View; import android.widget.ArrayAdapter;
import android.widget.ListView; import android.widget.TextView;
public class MainActivity extends ListActivity {
TextView selection;
String arr[]={“Intel”,”SamSung”, “Nokia”,”Simen”,”AMD”, “KIC”,”ECD”};
ArrayAdapter<String >adapter=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
//Thiết lập Data Source cho Adapter
adapter=new ArrayAdapter<String>
(this, android.R.layout.simple_list_item_1, arr);
//Gán Adapter vào ListView
//Nhớ là phải đặt id cho ListView theo đúng quy tắc
setListAdapter(adapter); selection=(TextView) findViewById(R.id.selection);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
String txt=”postion = “+position +”; value =”+arr[position]; selection.setText(txt);
}}
Bạn nhìn vào dòng lệnh số 10: đây là kế thừa từ ListActivity (Android đã viết class ListActivity kế thừa từ Activity rồi). Tức là ListActivity cũng chính là Activity.
Dòng lệnh số 28: setListAdapter(adapter); ListView cũng tự động cập nhập dữ liệu. Điều kiện để làm được:
- Kết thừa từ ListActivity,
- đặt id cho ListView theo đúng quy tắc android:id=”@android:id/list”
Trên đây là 5 trường hợp cơ bản sử dụng ListView. Các bạn hãy cố gắng làm lại thật nhiều lần để có thể hiểu sâu sắc hơn về nó nhé.
0 nhận xét: