Android: Tạo spinner lập trình từ mảng


198

Tôi hoàn toàn mới với Android và tôi đang cố gắng tạo một spinner theo chương trình và cung cấp cho nó dữ liệu từ một mảng, nhưng Eclipse đưa ra một cảnh báo mà tôi không thể xử lý.

Đây là những gì tôi nhận được:

ArrayList này chứa các phần tử nên có trong spinner (được điền từ một tệp sau này):

ArrayList<String> spinnerArray = new ArrayList<String>();

Đây là mã tôi tìm thấy trên một trang web sẽ tạo spinner:

Spinner spinner = new Spinner(this);
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this,
                android.R.layout.simple_spinner_dropdown_item,
                spinnerArray);
spinner.setAdapter(spinnerArrayAdapter);

Bây giờ, dòng thứ hai (ArrayAd CHƯƠNG ...) đưa ra một cảnh báo trong Eclipse "ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized", tôi không biết làm thế nào để sửa lỗi này (hoặc điều đó có nghĩa là gì ở vị trí đầu tiên :)).

Đó chỉ là một cảnh báo và Ứng dụng dường như chạy ổn, nhưng tôi vẫn muốn hiểu những gì sai và sửa nó. Bất kỳ gợi ý được đánh giá cao.

Chúc mừng, Chọn0r

Câu trả lời:


388

ArrayAdapter<String> nên làm việc.

I E:

Spinner spinner = new Spinner(this);
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>
            (this, android.R.layout.simple_spinner_item,
           spinnerArray); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout
                                                     .simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter); 

Tôi đã thử điều đó nhưng lỗi chỉ thay đổi một chút :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
Chọn0r

2
Nhận xét để nhanh chóng trong khi bạn chỉnh sửa bài đăng của mình :) Tôi đã bỏ lỡ lần thứ hai <String>, mã của bạn hoạt động ngay bây giờ, cảm ơn rất nhiều!
Chọn0r

23
sử dụng ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);hoặc nếu không, một nút radio có thể hiển thị trong spinner trên một số thiết bị.
Ken

câu trả lời của bạn rất hữu ích và bạn có thể vui lòng cho tôi biết rằng nếu tôi đang sử dụng hai spinners và tôi muốn nếu spinner thứ 1 chỉ thì thứ hai sẽ hoạt động

1
nó cũng mô tả phương pháp này trong tài liệu Android: developer.android.com/guide/topics/ui/controls/spinner.html
WOUNDEDStevenJones

109

Theo cách tương tự với Array

// Array of choices
String colors[] = {"Red","Blue","White","Yellow","Black", "Green","Purple","Orange","Grey"};

// Selection of the spinner
Spinner spinner = (Spinner) findViewById(R.id.myspinner);

// Application of the Array to the Spinner
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,   android.R.layout.simple_spinner_item, colors);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
spinner.setAdapter(spinnerArrayAdapter);

Tôi đã làm điều này bằng cách sử dụng ArrayList vì mảng của tôi xuất phát từ một vòng lặp (không phải tĩnh).
Jacksonkr

61

Điều này làm việc cho tôi với một chuỗi chuỗi có tên được shoestải từ các tài nguyên dự án:

Spinner              spinnerCountShoes = (Spinner)findViewById(R.id.spinner_countshoes);
ArrayAdapter<String> spinnerCountShoesArrayAdapter = new ArrayAdapter<String>(
                     this,
                     android.R.layout.simple_spinner_dropdown_item, 
                     getResources().getStringArray(R.array.shoes));
spinnerCountShoes.setAdapter(spinnerCountShoesArrayAdapter);

Đây là tệp tài nguyên của tôi ( res/values/arrays.xml) với mảng chuỗi có tên shoes:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="shoes">
        <item>0</item>
        <item>5</item>
        <item>10</item>
        <item>100</item>
        <item>1000</item>
        <item>10000</item>
    </string-array>
</resources>

Với phương pháp này, làm cho nó trở nên đa ngôn ngữ (nếu cần thiết) sẽ dễ dàng hơn.


36

Điều này thực sự làm việc cho tôi

    Spinner spinner = new Spinner(this);
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_spinner_item, spinnerArray);
    spinnerArrayAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );

    spinner = (Spinner) findViewById( R.id.spinner );
    spinner.setAdapter(spinnerArrayAdapter);

6
Mục đích của việc này là gì Spinner spinner = new Spinner(this);khi bạn làm điều nàyspinner = (Spinner) findViewById( R.id.spinner );
mr5

tại sao lỗi: không tìm thấy hàm tạo thích hợp nào cho hàm tạo ArrayAd CHƯƠNG (<nặc danh OnItemSelectedListener>, int, Chi tiếtData) ArrayAd Module.ArrayAd Module (Ngữ cảnh, int, int, List <String>) không áp dụng được?
dùng151968

6

công việc này đối với tôi: -

String[] array = {"A", "B", "C"};
String abc = "";


Spinner spinner = new Spinner(getContext());
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, array); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);

Tôi đang sử dụng một mảnh.


3

Trong ngôn ngữ Kotlin, bạn có thể làm theo cách này:

val values = arrayOf(
    "cat",
    "dog",
    "chicken"
)

ArrayAdapter(
    this,
    android.R.layout.simple_spinner_item,
    values
).also {
    it.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    spinner.adapter = it
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.