Android: สร้างสปินเนอร์โดยทางโปรแกรมจากอาเรย์


199

ฉันทุกคนใหม่สำหรับ Android และฉันกำลังพยายามสร้างสปินเนอร์แบบเป็นโปรแกรมและป้อนข้อมูลจากอาเรย์ แต่ Eclipse ให้คำเตือนแก่ฉันว่าฉันไม่สามารถจัดการได้

นี่คือสิ่งที่ฉันได้รับ:

ArrayList นี้เก็บองค์ประกอบที่ควรอยู่ในสปินเนอร์ (รับเต็มจากไฟล์ในภายหลัง):

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

นี่คือรหัสที่ฉันพบในเว็บไซต์ที่ควรสร้างสปินเนอร์:

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

ตอนนี้บรรทัดที่สอง (ArrayAdapter ... ) ให้คำเตือนแก่ฉันใน Eclipse โดยบอกว่า"ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized"ฉันไม่รู้ว่าจะแก้ไขอย่างไร (หรือสิ่งที่มีความหมายในตอนแรก :))

มันเป็นแค่คำเตือนและดูเหมือนว่าแอพจะทำงานได้ดี แต่ฉันยังคงต้องการที่จะเข้าใจว่ามีอะไรผิดปกติและแก้ไขได้ คำใบ้ใด ๆ ที่ชื่นชม

ทักทายเลือก 0r

คำตอบ:


389

ArrayAdapter<String> ควรทำงาน.

เช่น:

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); 

ฉันลองแล้ว แต่ข้อผิดพลาดก็เปลี่ยนไปเล็กน้อย :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
0

2
แสดงความคิดเห็นได้อย่างรวดเร็วในขณะที่คุณแก้ไขโพสต์ของคุณ :) ฉันพลาดไป<String>แล้วรหัสของคุณใช้งานได้ดีมาก
เลือก

23
ใช้ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);หรือปุ่มตัวเลือกอาจปรากฏขึ้นในสปินเนอร์ในอุปกรณ์บางอย่าง
Ken

คำตอบของคุณมีประโยชน์และคุณช่วยบอกฉันหน่อยได้ไหมว่าถ้าฉันใช้สปินเนอร์สองตัวและฉันต้องการถ้าสปินเนอร์ตัวที่ 1 เท่านั้นที่สองก็ควรใช้งานได้

1
นอกจากนี้ยังอธิบายวิธีการนี้ในเอกสารประกอบ android: developer.android.com/guide/topics/ui/controls/spinner.html
WOUNDEDStevenJones

109

ในทำนองเดียวกันกับ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);

ฉันทำสิ่งนี้โดยใช้ ArrayList เพราะอาร์เรย์ของฉันมาจากลูป (ไม่ใช่สแตติก)
Jacksonkr

61

นี้ทำงานให้ฉันกับสตริงอาร์เรย์ชื่อshoesโหลดจากทรัพยากรโครงการ:

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);

นี่คือแฟ้มทรัพยากรของฉัน ( res/values/arrays.xml) กับสตริงอาร์เรย์ชื่อ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>

ด้วยวิธีนี้จะทำให้พูดได้หลายภาษาง่ายขึ้น (ถ้าจำเป็น)


36

มันใช้งานได้จริงสำหรับฉัน

    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
วัตถุประสงค์ของสิ่งนี้คืออะไรSpinner spinner = new Spinner(this);เมื่อคุณทำเช่นนี้spinner = (Spinner) findViewById( R.id.spinner );
mr5

ทำไมข้อผิดพลาด: ไม่พบคอนสตรัคเตอร์ที่เหมาะสมสำหรับ ArrayAdapter (<anonymous OnItemSelectedListener>, int, DetailData) Constructor ArrayAdapter.ArrayAdapter (บริบท, int, int, List <String>) ไม่สามารถใช้ได้
user151968

6

งานนี้สำหรับฉัน: -

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);

ฉันกำลังใช้แฟรกเมนต์


3

ในภาษา Kotlin คุณสามารถทำได้ด้วยวิธีนี้:

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
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.