Hướng dẫn lập trình cơ bản với Android - Phần 11

ListWorkAdapter sẽ được sử dụng thay thế cho ArrayAdapter được bind với

ListView. Thông thường ArrayAdapter chỉ cho hiển thị String bằng TextView,

nhưng với việc kế thừa và override phương thức getView, ta có thể định nghĩa lại

hiển thị cho các thành phần của ListView

pdf5 trang | Chuyên mục: Android | Chia sẻ: dkS00TYs | Lượt xem: 1589 | Lượt tải: 1download
Tóm tắt nội dung Hướng dẫn lập trình cơ bản với Android - Phần 11, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 B5: Chỉnh sửa file strings.xml trong res\value: 
Mã: 
 Example 3 
 Enter the work 
here 
 Hour 
 Minute 
 Add work 
B6: Time to coding. Đi tới src\at.exam tạo một class mới là CustomViewGroup 
với nội dung sau: 
Mã: 
package at.exam; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.widget.CheckBox; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
public class CustomViewGroup extends LinearLayout { 
 public CheckBox cb; 
 public TextView workContent; 
 public TextView timeContent; 
 public CustomViewGroup(Context context) { 
 super(context); 
 //Sử dụng LayoutInflater để gán giao diện trong 
list.xml cho class này 
 LayoutInflater li = (LayoutInflater) 
this.getContext() 
.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 li.inflate(R.layout.list, this, true); 
 //Lấy về các View qua Id 
 cb = (CheckBox) findViewById(R.id.check_work); 
 workContent = (TextView) 
findViewById(R.id.work_content); 
 timeContent = (TextView) 
findViewById(R.id.time_content); 
 } 
} 
Đoạn code trên giúp ta định nghĩa giao diện của custom ViewGroup mới dựa trên 
file list.xml. Mọi người cũng có thể tạo giao diện bằng code, ko cần sử dụng XML 
nhưng sẽ phức tạp hơn và mình cũng ko giới thiệu ở đây. 
B7: Tạo 1 class Work cũng trong at.exam để thể hiện công việc: 
Mã: 
package at.exam; 
public class Work { 
 private String workContent; 
 private String timeContent; 
 private boolean isChecked; 
 public Work(String workContent, String timeContent) 
{ 
 this.workContent = workContent; 
 this.timeContent = timeContent; 
 isChecked = false; 
 } 
 public String getContent() { 
 return workContent; 
 } 
 public String getTime() { 
 return timeContent; 
 } 
 public void setChecked(boolean isChecked) { 
 this.isChecked = isChecked; 
 } 
 public boolean isChecked() { 
 return isChecked; 
 } 
} 
Code rất đơn giản nên mình sẽ không chú thích nữa. 
B8: Chúng ta đã tạo xong custem ViewGroup, bây giờ chính là lúc sử dụng. Tạo 1 
class mới tên là ListWorkApdapter trong at.exam: 
Mã: 
package at.exam; 
import java.util.ArrayList; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.TextView; 
import 
android.widget.CompoundButton.OnCheckedChangeListener; 
public class ListWorkAdapter extends 
ArrayAdapter{ 
 ArrayList array; 
 int resource; 
 Context context; 
 public ListWorkAdapter(Context context, int 
textViewResourceId, 
 ArrayList objects) { 
 super(context, textViewResourceId, objects); 
 this.context = context; 
 resource = textViewResourceId; 
 array = objects; 
 } 
 //Phương thức xác định View mà Adapter hiển thị, ở 
đây chính là CustomViewGroup 
 //Bắt buộc phải Override khi kế thừa từ 
ArrayAdapter 
 @Override 
 public View getView(int position, View convertView, 
ViewGroup parent) { 
 View workView = convertView; 
 if (workView == null) { 
 workView = new 
CustomViewGroup(getContext()); 
 } 
 //Lấy về đối tượng Work hiện tại 
 final Work work = array.get(position); 
 if (work != null) { 
 TextView workContent = ((CustomViewGroup) 
workView).workContent; 
 TextView timeContent = ((CustomViewGroup) 
workView).timeContent; 
 CheckBox checkWork = ((CustomViewGroup) 
workView).cb; 
 //Set sự kiện khi đánh dấu vào checkbox 
trên list 
 checkWork.setOnCheckedChangeListener(new 
OnCheckedChangeListener() { 
 @Override 
 public void 
onCheckedChanged(CompoundButton buttonView, 
 boolean isChecked) { 
 work.setChecked(isChecked); 
 } 
 }); 
 //Lấy về nội dung cho TextView và CheckBox 
dựa vào đối tượng Work hiện tại 
 workContent.setText(work.getContent()); 
 timeContent.setText(work.getTime()); 
 checkWork.setChecked(work.isChecked()); 
 } 
 return workView; 
 } 
} 
ListWorkAdapter sẽ được sử dụng thay thế cho ArrayAdapter được bind với 
ListView. Thông thường ArrayAdapter chỉ cho hiển thị String bằng TextView, 
nhưng với việc kế thừa và override phương thức getView, ta có thể định nghĩa lại 
hiển thị cho các thành phần của ListView. 

File đính kèm:

  • pdfHướng dẫn lập trình cơ bản với Android - Phần 11.pdf
Tài liệu liên quan