Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Kiểm tra ArrayList rỗng cho ListView trong Android

Xử lý ListView khi dữ liệu rỗng

Khi ArrayList rỗng, ListView hiển thị trống. Cần hiển thị thông báo "Không có dữ liệu" hoặc ẩn ListView để UX tốt hơn.

Cách 1: Sử dụng setEmptyView (Khuyên dùng)

<!-- activity_main.xml -->
<FrameLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <!-- View hiển thị khi ListView rỗng -->
    <TextView
        android:id="@+id/emptyView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Chưa có dữ liệu"
        android:textSize="18sp"
        android:textColor="#999"
        android:visibility="gone"/>
</FrameLayout>
// MainActivity.java
listView = findViewById(R.id.listView);
TextView emptyView = findViewById(R.id.emptyView);
listView.setEmptyView(emptyView); // Tự động show/hide

adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dataList);
listView.setAdapter(adapter);

Cách 2: Kiểm tra thủ công isEmpty()

private void updateListView() {
    if (dataList.isEmpty()) {
        listView.setVisibility(View.GONE);
        emptyView.setVisibility(View.VISIBLE);
    } else {
        listView.setVisibility(View.VISIBLE);
        emptyView.setVisibility(View.GONE);
        adapter.notifyDataSetChanged();
    }
}

Cách 3: Empty View trong ListActivity/Fragment

// Nếu dùng ListFragment
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    getListView().setEmptyView(view.findViewById(R.id.emptyView));
}

Ví dụ hoàn chỉnh (tương tự bài trước)

findViewById(R.id.save).setOnClickListener(v -> {
    String name = edtName.getText().toString().trim();
    if (name.isEmpty()) {
        edtName.setError("Nhập tên");
        return;
    }
    nameSet.add(name);
    edtName.setText("");
    
    dataList.clear();
    dataList.addAll(nameSet);
    Collections.sort(dataList);
    
    // Cập nhật UI
    updateListView(); // Gọi cách 2
    Toast.makeText(this, "Đã thêm", Toast.LENGTH_SHORT).show();
});

Kết quả

Kiểm tra ArrayList rỗng cho ListView trong Android

Ban đầu hiển thị "Chưa có dữ liệu". Sau khi thêm, ListView hiện dữ liệu, empty view ẩn.

Best Practices

  • Luôn dùng setEmptyView() - đơn giản, tự động, ít bug.
  • Empty view nên nằm cùng parent với ListView (FrameLayout/RelativeLayout).
  • RecyclerView: dùng adapter.registerAdapterDataObserver() để observe thay đổi.
  • Kiểm tra null trước isEmpty(): if (list == null || list.isEmpty()).