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

Cách hiển thị ListView theo thứ tự ngẫu nhiên Android

Giới thiệu

Ví dụ này sử dụng Collections.shuffle() để xáo trộn ngẫu nhiên thứ tự các phần tử trong ArrayList trước khi hiển thị lên ListView.

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

Giao diện chuẩ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: Xáo trộn ngẫu nhiên
                Collections.shuffle(array_list);
                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.shuffle()

  • Sử dụng thuật toán Fisher-Yates để xáo trộn ngẫu nhiên đều đặn.
  • Thay đổi list gốc (in-place).
  • Có thể truyền Random tùy chỉnh: Collections.shuffle(list, new Random(seed)) để có kết quả lặp lại được.
  • Phức độ O(n).

Chạy ứng dụng

Cách hiển thị ListView theo thứ tự ngẫu nhiên Android

Mỗi lần nhấn "Lưu", thứ tự hiển thị trong ListView thay đổi ngẫu nhiên.