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

Cách sử dụng Vector trong ListView Android

Vector vs ArrayList

Vector là class legacy (từ Java 1.0), đồng bộ hóa (thread-safe) nên chậm hơn ArrayList. Android khuyến nghị dùng ArrayList trừ khi cần thread-safe. Tuy nhiên, ArrayAdapter chấp nhận bất kỳ List nào, bao gồm Vector.

Ví dụ sử dụng Vector

MainActivity.java

package com.example.vectordemo;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Vector;

public class MainActivity extends AppCompatActivity {
    EditText name;
    ArrayAdapter<String> adapter;
    Vector<String> vectorList;
    ListView listView;

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

        vectorList = new Vector<>();
        name = findViewById(R.id.name);
        listView = findViewById(R.id.listView);

        findViewById(R.id.refresh).setOnClickListener(v -> {
            if (adapter != null) {
                adapter.notifyDataSetChanged();
            }
        });

        findViewById(R.id.save).setOnClickListener(v -> {
            String input = name.getText().toString().trim();
            if (!input.isEmpty()) {
                vectorList.add(input);
                // Tạo adapter mới từ vectorList
                adapter = new ArrayAdapter<>(this, 
                    android.R.layout.simple_list_item_1, vectorList);
                listView.setAdapter(adapter);
                Toast.makeText(this, "Đã thêm", Toast.LENGTH_SHORT).show();
            } else {
                name.setError("Nhập tên");
            }
        });
    }
}

Giao diện activity_main.xml

Giống các ví dụ trước: 1 EditText, 2 Button (Lưu, Làm mới), 1 ListView.

Điểm khác biệt với ArrayList

Đặc điểmVectorArrayList
Thread-safeCó (tất cả method synchronized)Không
Hiệu năngChậm hơn do synchronizationNhanh hơn
Tăng dung lượngMặc định gấp đôi (2x)Mặc định 1.5x
API hiện đạiLegacy, ít cập nhậtTiêu chuẩn, khuyến nghị

Khi nào nên dùng Vector?

  • Code cũ (legacy) đã dùng Vector.
  • Chia sẻ list giữa nhiều thread không dùng đồng bộ hóa bên ngoài.
  • Tương thích API cũ yêu cầu Vector.

Best practice Android

// Thay vì Vector, dùng ArrayList + Collections.synchronizedList() nếu cần thread-safe
List<String> safeList = Collections.synchronizedList(new ArrayList<>());

// Hoặc dùng CopyOnWriteArrayList cho đọc nhiều, ghi ít
List<String> cowList = new CopyOnWriteArrayList<>();

Kết luận

Ví dụ này minh họa Vector hoạt động với ArrayAdapter, nhưng không khuyến nghị cho ứng dụng Android mới. Hãy dùng ArrayList hoặc các concurrent collection phù hợp.