ListView
và SpinnerView
. Trong phần này ta sẽ lần lượt xem xét từng loại danh sách này.ListView
ListView hiển thị danh sách các đối tượng con dưới dạng danh sách dọc, có khả năng cuộn khi chiều dài danh sách vượt quá chiều cao của view mẹ. Ta sẽ xem xét ListView trong trường hợp đơn giản nhất: hiển thị danh sách các phần tử dạng chữ.
Trước tiên, ta chuẩn bị mảng dữ liệu các chữ cần hiển thị trong danh sách. Ta có thể nhập cứng (hard code) danh sách này trong mã nguồn java của Activity như sau.
String[] presidents= {
"Dwight D. Eisenhower",
"John F. Kennedy",
"Lyndon B. Johnson",
"Richard Nixon",
"Gerald Ford",
"Jimmy Carter",
"Ronald Reagan",
"George H. W. Bush",
"Bill Clinton",
"George W. Bush",
"Barack Obama"
};
Tuy nhiên cách làm này làm cho mã nguồn rối hơn, gây khó khăn cho việc bảo trì, cũng như hạn chế khả năng địa phương hóa (thay đổi ngôn ngữ cho ứng dụng). Vì vậy, trong lập trình Android, phương pháp được khuyên dùng là định nghĩa các dữ liệu tĩnh này trong thư mục “res”. Cụ thể, đối với mảng chữ như trên, ta có thể định nghĩa trong file “res/values/string.xml” như sau:
Hello World, BasicViews5Activity!
BasicViews5
- Dwight D. Eisenhower
- John F. Kennedy
- Lyndon B. Johnson
- Richard Nixon
- Gerald Ford
- Jimmy Carter
- Ronald Reagan
- George H. W. Bush
- Bill Clinton
- George W. Bush
- Barack Obama
Sau đó, trong mã nguồn Java, ta có thể dễ dàng lấy ra mảng này bằng cách như sau:
String[] presidents;
presidents = getResources().getStringArray(R.array.presidents_array);
Để tạo một danh sách, trước tiên ta khai báo 1 ListView trong file layout của Activity:
Đối với Activity có một ListView bên trong, Android định nghĩa sẵn lớp con của Activity là ListActivity giúp cho quá trình làm việc với ListView trở đơn giản hơn. Để có thể dụng được ListActivity này, có 2 việc cần phải làm:
- Activity phải kế thừa từ lớp
android.app.ListActivity
- ListView trong file layout của Activity phải có id là
"@+id/android:list"
Mã nguồn của Activity sẽ như sau:
public class BasicViews5Activity extends ListActivity {
String[] presidents;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
presidents =
getResources().getStringArray(R.array.presidents_array);
setListAdapter(new ArrayAdapter(this,
android.R.layout.simple_list_item_checked, presidents));
}
@Override
public void onListItemClick(
ListView parent, View v, int position, long id)
{
Toast.makeText(this,
"You have selected " + presidents[position],
Toast.LENGTH_SHORT).show();
}
}
ListView trong Android cũng lấy nội dung từ một Adapter giống như trường hợp của Gallery ta đã làm quen trước đó. Đối với ListActivity, ta không cần lấy tham chiếu đến ListView một cách minh bạch, mà có thể gọi thẳng hàm
setListAdapter
để đặt adapter cho listView trong Activity (được đặt id theo quy định như đã nói ở trên).
Để xử lý sự kiện người dùng bấm chọn một phần tử trong ListView, ta chỉ cần nạp chồng hàm
onListItemClick
như đoạn mã ở trên. Trong ví dụ này ta chỉ đơn thuần in ra chữ của phần tử được chọn.
Activity trên khi chạy trên emulator sẽ có dạng như sau:
Ta có thể vuốt lên/xuống màn hình để xem toàn bộ danh sách. Có rất nhiều tùy chọn có thể làm với ListView. Bạn đọc tự tìm hiểu coi như bài tập. Ở đây ta chỉ nói thêm một tính khả năng của ListView cho phép lựa chọn nhiều phần tử cùng lúc (multi-item selection). Để bật tính năng này, ta chỉ cần gọi hàm
setChoiceMode
của ListView như sau:
ListView lstView = getListView();
lstView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
ListView với thuộc tính lựa chọn nhiều phần tử được bật sẽ có dạng như sau: