Các item của danh sách này được tự động chèn vào danh sách bởi sử dụng một Adapter mà kéo nội dung từ một nguồn như một mảng hoặc cơ sở dữ liệu... Android cung cấp một số lớp con hữu íc
Trang 1List View trong Android
ListView trong Android là một view mà nhóm một số item và hiển thị chúng trong danh
sách theo chiều dọc có thể scroll Các item của danh sách này được tự động chèn vào
danh sách bởi sử dụng một Adapter mà kéo nội dung từ một nguồn như một mảng hoặc
cơ sở dữ liệu
Trang 2LIST VIEW
Một Adapter thực sự là cầu nối giữa các thành phần UI và nguồn dữ liệu mà điền dữ liệu vào trong thành phần UI Adapter giữ dữ liệu và gửi dữ liệu tới Adapter View, từ đó view có thể lấy dữ liệu từ Adapter View đó và hiển thị dữ liệu trên các view khác nhau ở dạng Spinner, List View, Grid View, …
ListViewvà GridView là các lớp con của AdapterView Gắn kết chúng với mộtAdapter,
mà thu nhận dữ liệu từ một nguồn ngoại vi và tạo một View để biểu diễn mỗi entry
Android cung cấp một số lớp con hữu ích của lớp Adapter để thu lấy các kiểu dữ liệu khác nhau và xây dựng các view cho một AdapterView (ví dụ ListView hoặc GridView) Các
Adapter, CursorAdapter,SimpleCursorAdapter,SpinnerAdapter và WrapperListAdapte
r
Các thuộc tính của ListView trong Android
Dưới đây là một số thuộc tính riêng cho ListView: −
Attribute Miêu tả
android:id Đây là ID mà nhận diện duy nhất Layout
android:divider Đây là drawable hoặc color để vẽ giữa các item trong
danh sách
android:dividerHeight Xác định chiều cao của divider Nó có thể là px, dp, sp, in,
hoặc mm
android:entries Xác định tham chiếu tới một array resource mà sẽ đưa
đến ListView
android:footerDividersEnabled Khi được thiết lập là false, thì ListView sẽ không vẽ divider
trước mỗi footer của view Giá trị mặc định là true
android:headerDividersEnabled Khi được thiết lập là false, thì ListView sẽ không vẽ divider
sau mỗi header của view Giá trị mặc định là true
Trang 3ArrayAdapter trong Android
Bạn có thể sử dụng Adapter này khi nguồn dữ liệu là một mảng Theo mặc định, ArrayAdapter tạo một view cho mỗi item trong mảng bằng việc gọi toString() trên mỗi item
và đặt nội dung vào trong một TextView Giả sử bạn có một mảng các chuỗi và muốn hiển thị trong một ListView, bạn khởi tạo một ArrayAdapter mới sử dụng một Constructor để xác định Layout cho mỗi chuỗi và mảng chuỗi −
ArrayAdapter adapter = new
ArrayAdapter < String >( this , layout ListView , StringArray );
Trong Constructor này, các tham số là: −
• Tham số đầu tiên thisthis là ngữ cảnh ứng dụng Trong hầu hết trường hợp, bạn giữ nó là this
• Tham số thứ hai sẽ là Layout được định nghĩa trong XML file và có TextView cho
mỗi chuỗi trong mảng
• Tham số cuối cùng là một mảng các chuỗi sẽ được đưa vào trong TextView
Khi đã tạo ArrayAdapter, thì sau đó bạn chỉ cần gọisetAdapter() trên đối tượng ListViewcủa bạn như sau:−
ListView listView = ( ListView ) findViewById ( id listview );
listView setAdapter ( adapter );
Bạn sẽ định nghĩa List View của bạn dưới thư mục res/layout trong một XML file Với ví dụ của chúng ta là activity_main.xml file
Ví dụ
Sau đây là ví dụ đưa bạn qua các bước đơn giản để minh họa cách tạo ứng dụng Android bởi sử dụng ListView Bạn theo các bước sau để sửa đổi ứng dụng Android chúng ta đã
tạo trong chương Ví dụ Hello World −
Bước Miêu tả
1 Bạn sử dụng Android Studio IDE để tạo ứng dụng Android với tên ListDisplay dưới
một package là com.example.ListDisplay như đã giải thích trong chương Ví dụ Hello
Trang 4World
2 Sửa đổi nội dung mặc định của res/layout/activity_main.xml để bao nội dung ListView
với các thuộc tính
3 Không cần thay đi string.xml, Android Studio sẽ để ý các hằng chuỗi mặc định
4 Tạo một TextView file có tên là res/layout/activity_listview.xml File này sẽ có thiết lập
để hiển thị tất cả item trong danh sách Do đó, bạn có thể tùy chỉnh font, padding,
color, với file này
6 Chạy ứng dụng để chạy Android Emulator và kiểm tra kết quả các thay đổi đã thực
hiện trong ứng dụng
đổi:src/com.example.ListDisplay/ListDisplay.java
package com example ListDisplay ; import android os Bundle ; import
android app Activity ; import android view Menu ; import
android widget ArrayAdapter ; import android widget ListView ; public class
ListDisplay extends Activity // Array of strings String []
mobileArray =
{ "Android" , "IPhone" , "WindowsMobile" , "Blackberry" , "WebOS" , "Ubuntu" , "Windows7" , "M
ax OS X" }; @Override protected void onCreate ( Bundle
savedInstanceState ) { super onCreate ( savedInstanceState );
setContentView ( layout activity_main ); ArrayAdapter adapter = new
ArrayAdapter < String >( this , R layout activity_listview , mobileArray );
ListView listView = ( ListView ) findViewById ( id mobile_list );
listView setAdapter ( adapter ); } }
Sau đây là nội dung của res/layout/activity_main.xml file −
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent" android:layout_height = "match_parent"
android:orientation = "vertical" tools:context = ".ListActivity" <ListView
android:id = "@+id/mobile_list" android:layout_width = "match_parent"
android:layout_height = "wrap_content" </ListView> </LinearLayout>
Sau đây là nội dung của res/values/strings.xml để định nghĩa hai hằng −
Trang 5<? xml version = "1.0" encoding = "utf-8" ?> <resources> <string
name = "app_name" > ListDisplay </string> <string
name = "action_settings" > Settings </string> </resources>
Sau đây là nội dung của res/layout/activity_listview.xml file:
<? xml version = "1.0" encoding = "utf-8" ?> <! Single List Item Design >
<TextView xmlns:android = "http://schemas.android.com/apk/res/android"
android:id = "@+id/label" android:layout_width = "fill_parent"
android:layout_height = "fill_parent" android:padding = "10dip"
android:textSize = "16dip" android:textStyle = "bold" </TextView>
Chạy ứng dụng Hello World! vừa sửa đổi ở trên Giả sử bạn đã tạo AVD trong khi cài đặt
Để chạy ứng dụng từ Android Studio, mở activity file và nhấn biểu tượng Run từ thanh công cụ −
Trang 6SimpleCursorAdapter trong Android
Bạn có thể sử dụng Adapter này khi nguồn dữ liệu của bạn là một Database Cursor (Con
trỏ tới cơ sở dữ liệu) Khi sử dụng SimpleCursorAdapter, bạn phải xác định một Layout để
sử dụng cho mỗi hàng trong Cursorvà các cột nào trong Cursor nên được chèn vào trong
View nào trong Layout
Ví dụ, nếu bạn muốn tạo một danh sách tên, số điện thoại, bạn có thể thực hiện một truy vấn mà trả về một Cursor chứa một hàng cho mỗi người và các cột cho các tên và số Sau
Trang 7đó, bạn tạo một mảng chuỗi xác định các cột nào từ Cursor bạn muốn trong Layout cho mỗi kết quả và một mảng số nguyên xác định các view tương ứng mà mỗi cột nên được đặt −
String [] fromColumns = { ContactsContract Data DISPLAY_NAME ,
ContactsContract CommonDataKinds Phone NUMBER }; int [] toViews =
{ id display_name , R id phone_number };
Khi bạn khởi tạo SimpleCursorAdapter, truyền Layout để sử dụng cho mỗi kết quả, Cursor chứa các kết quả, và hai mảng là: −
SimpleCursorAdapter adapter = new SimpleCursorAdapter ( this ,
R layout person_name_and_number , cursor , fromColumns , toViews , 0 );
ListView listView = getListView (); listView setAdapter ( adapter );
Sau đó, SimpleCursorAdapter tạo một view cho mỗi hàng trong Cursor bởi sử dụng Layout
đã cung cấp bằng việc chèn mỗi item vào trong tương ứng: toViews tương ứng: