List 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.

List View trong Android

List 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, …

ListViewGridView 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 phổ biến làArrayAdapter,Base Adapter, CursorAdapter, SimpleCursorAdapter,SpinnerAdapterWrapperListAdapter

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

ArrayAdapter 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,R.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 ListView của bạn như sau:−

ListView listView = (ListView) findViewById(R.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 World .
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

Sau đây là nội dung của Main Activity file đã được sửa đổ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","Max OS X"};
   
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listview, mobileArray);
      
      ListView listView = (ListView) findViewById(R.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 −

<?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ụ. −

List View trong Android

SimpleCursorAdapter 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 đó, 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 = {R.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:

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.


user_interface_layout_trong_android.jsp


Tài liệu giáo viên