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

Cách dùng Collections.fill() cho ListView Android

Giới thiệu

Ví dụ này demo Collections.fill(List, obj) - thay thế tất cả phần tử trong List bằng một đối tượng cụ thể, sau đó hiển thị lên ListView.

Bước 1 & 2: Tạo dự án và Giao diện

Giao diện: EditText, nút Lưu, Làm mới, ListView.

Bước 3: MainActivity.java

package com.example.andy.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class MainActivity extends AppCompatActivity {
    EditText name;
    ArrayAdapter<String> arrayAdapter;
    ArrayList<String> array_list;
    Set<String> set = new HashSet<>();
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        array_list = new ArrayList<>();
        name = findViewById(R.id.name);
        listView = findViewById(R.id.listView);

        findViewById(R.id.refresh).setOnClickListener(v -> {
            if (arrayAdapter != null) {
                arrayAdapter.notifyDataSetChanged();
                listView.invalidateViews();
                listView.refreshDrawableState();
            }
        });

        findViewById(R.id.save).setOnClickListener(v -> {
            String input = name.getText().toString();
            if (!input.isEmpty()) {
                set.add(input);
                array_list.clear();
                array_list.addAll(set);

                // QUAN TRỌNG: Điền toàn bộ list bằng chuỗi "sairam"
                Collections.fill(array_list, "sairam");

                arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, array_list);
                listView.setAdapter(arrayAdapter);
                Toast.makeText(this, "Đã thêm", Toast.LENGTH_LONG).show();
            } else {
                name.setError("Nhập tên");
            }
        });
    }
}

Giải thích Collections.fill()

  • Collections.fill(list, obj): Thay thế tất cả phần tử trong list bằng obj.
  • List phải đã có kích thước > 0 (không tự mở rộng).
  • Thay đổi in-place, trả về void.
  • Ví dụ: [A, B, C] fill("X") → ["X", "X", "X"].
  • Khác với Arrays.fill() dành cho mảng.

Chạy ứng dụng

Cách dùng Collections.fill() cho ListView Android

Dù nhập bất kỳ tên gì, ListView chỉ hiển thị toàn bộ "sairam" vì fill() ghi đè tất cả.