Hiển thị các bài đăng có nhãn arrayadapter. Hiển thị tất cả bài đăng

Thứ Bảy, 12 tháng 5, 2018

Hướng dẫn sử dụng ListView để hiển thị danh sách dữ liệu trong Android

  Không có nhận xét nào
tháng 5 12, 2018

Hôm nay mình sẽ hướng dẫn cho các bạn cách sử dụng ListView để hiển thị một danh sách dử liệu bất kỳ. Giả sử chúng ta có danh sách tên học sinh như hình bên dưới, làm sao để ta có thể hiển thị danh sách này thành dạng view trong Android?

Qua bài viết này, mình sẽ hướng dẫn cho các bạn cách sử dụng ListView để giải quyết vấn đề trên, cùng với đó là khái niệm Adapter trong lập trình Android.

Giới thiệu sơ qua về ListView:
  • ListView là một ViewGroup ( View có chứa nhiều View con bên trong) dùng để hiển thị danh sách các item
  • ListView có khả năng cuộn các item ( trường hợp nhiều item màn hình không hiển thị hết )
  • Các item sẽ tự động thêm vào ListView thông qua một Adapter, Adapter này có nhiệm vụ lấy data từ một nguồn nào có và chuyển về cho ListView để hiển thị.
Vậy là các bạn đã có một chút khái niệm về ListView, vậy còn Adapter thì sao, Adapter là gì, vì sao cần phải có Adapter?

Ví dụ cho dể hiểu thì Adapter giống như cái Adapter để đọc thẻ nhớ vậy, ngày xưa mỗi lần muốn copy hình từ thẻ nhớ sang máy tính, hay copy nhạc vào thẻ nhớ, chúng ta đều cần có adpater. Vì đa số máy tính ngày đó không đọc được thẻ SD nên ta cần phải ra tiệm mua một cái adapter về, gắp thẻ nhớ vào Adapter rồi gắn Adapter đó vào máy tính.
Adapter trong lập trình Android giống hệt như ví dụ trên, vì ListView không hiểu được danh sách học sinh ( ở dạng String Array ) ban đầu của chúng ta, nói cách khác là nó không biết hiển thị String Array này như thế nào ( layout màu sắc, cở chữ, canh lề trái phải trên dưới v...v.. ). Adapter đóng vai trò là nhân vật trung gian, đứng giữa String Array và ListView để giải quyết vấn đề trên.

Vậy công việc của chúng ta là xây dựng một Adapter để hiển thị danh sách trên, sau nó gắn nó vào ListView vậy là xong.

Việc xây dựng một Adapter từ đầu khá là phức tạp, nhất là với những bạn mới bắt đầu học lập trình Android, may thay Android Farmwork có Implement sẳn cho chúng ta một vài Adapter để dùng trong những trường hợp đơn giản. Một trong số đó là ArrayAdapter.

ArrayAdapter là adapter dùng được cho mảng với bất kỳ kiểu nào, Adapter này sẽ chuyển nội dung của item thành một TextView, nội dung của TextView tùy thuộc vào kiểu của item trong mảng ban đầu.
  • Nếu kiểu của item trong mảng đó là CharSequence (trường hợp của chúng ta là String, String có implement CharSequence) thì nội dùng TextView cũng chính là nội dung của CharSequence đó
  • Nếu kiểu của item trong mảng không phải là CharSequence thì TextView sẽ hiển thị nội dung được trả về từ phương thức ToString() của item đó
Chúng ta bắt đầu code:

Đầu tiên là Layout của Acivity:
MainActivity: 
Trong MainActivity ta khai báo 3 biến toàn cục
  • vStudentList: ListView mà chúng ta dùng để hiển thị, dữ liệu để hiện
  • studentData: dữ liệu nguồn
  • adapter: adapter để gắn vào ListView
Trong onCreate đầu tiên ta khởi tạo dữ liệu nguồn, reference ListView. Tiếp theo ta khởi tạo ArrayAdapter, constructor của ArrayAdapter yêu cầu 3 tham số: context, layout cho view và dữ liệu nguồn.
ArrayAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull T[] objects)
  • Context context: mình sẽ có riêng 1 bài để nói về context cho bạn nào chưa hiểu định nghĩa context, trong bài thì tham số này mình truyền this có nghĩa là MainActivity ( Activity cũng là 1 context(
  • int resource: là id của file layout dùng để tạo view, ở đây mình truyền android.R.layout.simple_list_item_1, đây là 1 file layout có sẳn trong android farmwork, layout đó có nội dùng như sau:
    Đây là một file layout bình thường, trong layout này có chứa 1 TextView để hiển thị nội dung của item như đã nói ở trên. Lưu ý là bạn truyền vào id của resource chứ không phải file resource
  • T[] objects: mãng dữ liệu nguồn, trường hợp của chúng ta là String[] đơn giản truyền vào studentData
Sau khi khởi tạo xong ArrayAdapter, chúng ta gắn nó vào ListView qua phương thức setAdapter

Chạy ứng dụng chúng ta được kết quả như hình: 
Vậy là chúng ta đã hiểu được cách dùng ListView và những khái niệm căn bản liên quan tới ListView.

Tuy nhiên trong trường hợp chúng ta muốn hiển thị thêm các thông tin như giới tính, tuổi, ngày tháng năm sinh thì sao. Rõ ràng Adapter với layout có duy nhất 1 TextView không thể đáp ứng được điều này. Vậy nên ở bài tiếp theo, mình sẽ hướng dẫn cho các bạn cách viết custom adapter đi sâu hơn và chi tiết hơn về ListView.

Nếu các bạn có thắc mắt hay yêu cầu gì, hãy comment bên dưới mình sẽ giải đáp.

Hẹn gặp lại các bạn vào những bài sau.





Read More