วิธีเพิ่มรายการไปยังเครื่องปั่นด้ายใน Android


107

จะเพิ่มไอเท็มลงในเครื่องปั่นด้ายได้อย่างไร?


1
หากคุณต้องการเพิ่มรายการแบบไดนามิกในรายการของคุณและเรียกอะแดปเตอร์
notifyDataSetChanged

คำตอบ:


144

ไฟล์ XML:

<Spinner
    android:id="@+id/Spinner01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

ไฟล์ Java:

public class SpinnerExample extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String[] arraySpinner = new String[] {
            "1", "2", "3", "4", "5", "6", "7"
        };
        Spinner s = (Spinner) findViewById(R.id.Spinner01);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, arraySpinner);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s.setAdapter(adapter);
    }
}

ดูตัวอย่างปั่น


7
แม้ว่าสิ่งนี้อาจตอบคำถามได้ในทางทฤษฎี แต่ก็ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์สำหรับการอ้างอิง
Bill the Lizard

ใช้ android.R.layout.simple_spinner_dropdown_item นี้แทน android.R.layout.simple_spinner_item มันดูดีกว่ามาก
sai Gorantla

array_spinner คืออะไร? ชื่อของอาร์เรย์คือ arraySpinner สะกดผิดหรือว่าต้องเป็นแบบนั้นเท่านั้น>
SurajS

1
พิจารณาเพิ่มadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);(ก่อนอื่นs.setAdapter(adapter);เพื่อให้รายการแบบเลื่อนลงดูดีขึ้น
ban-geoengineering

1
@StephenM เปลี่ยนลิงค์
pankajagarwal

99

ฉันพบตัวเลือกอื่น: คำจำกัดความของสปินเนอร์ในไฟล์เค้าโครง

<Spinner android:id="@+id/spinner"
    android:layout_width="fill_parent"
    android:drawSelectorOnTop="true"
    android:prompt="@string/spin"
    android:entries="@array/spinnerItems"
/>

นิยามรายการในไฟล์ array.xml:

<resources>
    <string-array name="spinnerItems">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
        <item>item4</item>
    </string-array>
</resources>

ลิงก์ไปยังซอร์สโค้ดแบบเต็ม


ฉันลองใช้วิธีการทั้งหมดข้างต้นและแบบฝึกหัดอื่น ๆ แต่นี่เป็นวิธีเดียวที่ใช้ได้ผลสำหรับฉัน ขอบคุณมาก!
snapplex

ดีใจที่ได้ช่วยคุณ @snapplex;)
maxivis

1
นี่ควรเป็นคำตอบอันดับต้น ๆ ทำความสะอาด.

30

ลองใช้รหัสนี้:

final List<String> list = new ArrayList<String>();
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");
list.add("Item 5");

final String[] str = {"Report 1", "Report 2", "Report 3", "Report 4", "Report 5"};

final Spinner sp1 = (Spinner) findViewById(R.id.spinner1);
final Spinner sp2 = (Spinner) findViewById(R.id.spinner2);

ArrayAdapter<String> adp1 = new ArrayAdapter<String>(this,
                              android.R.layout.simple_list_item_1, list);
adp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp1.setAdapter(adp1);

ArrayAdapter<String> adp2 = new ArrayAdapter<String>(this,
                                  android.R.layout.simple_spinner_item, str);
adp2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp2.setAdapter(adp2);

sp1.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), list.get(position), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

sp2.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), str[position], Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

คุณยังสามารถเพิ่มค่ารายการสปินเนอร์ผ่านไฟล์ xml ของ String array ..

<resources>
    <string name="app_name">Spinner_ex5</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
    <string-array name="str2">
        <item>Data 1</item>
        <item>Data 2</item>
        <item>Data 3</item>
        <item>Data 4</item>
        <item>Data 5</item>
    </string-array>
</resources>

ใน mainActivity.java:

final Spinner sp3 = (Spinner) findViewById(R.id.spinner3);
ArrayAdapter<CharSequence> adp3 = ArrayAdapter.createFromResource(this,
                                    R.array.str2, android.R.layout.simple_list_item_1);

adp3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp3.setAdapter(adp3);
sp3.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            String ss = sp3.getSelectedItem().toString();
            Toast.makeText(getBaseContext(), ss, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

9

สำหรับการเพิ่มรายการใน Spinner คุณสามารถทำได้อย่างหนึ่งลองสร้างอะแดปเตอร์จากนั้นเพิ่ม / ลบรายการลงในอะแดปเตอร์จากนั้นคุณสามารถผูกอะแด็ปเตอร์นั้นกับสปินเนอร์ได้อย่างง่ายดายโดยใช้setAdapter()วิธีการ

นี่คือตัวอย่าง:

spinner.setAdapter(adapter);
adapter.add(item1);
adapter.add(item2);
adapter.add(item3);
adapter.add(item4);
adapter.add(item5);
adapter.notifyDataSetChanged();
spinner.setAdapter(adapter);

ขอบคุณสำหรับการตอบกลับของคุณฉันได้รับวิธีแก้ปัญหาแล้วตอนนี้ฉันกำลังเผชิญกับปัญหาหนึ่งอยู่

ฉันต้องการดึงรายการที่เลือกของสปินเนอร์เช่นตำแหน่งของมันต่อไปฉันต้องการส่งต่อไปยังวิธีการอื่นดูว่าฉันทำอะไร ... dataspin.setOnItemSelectedListener (myitemlistener ใหม่ ());

dataspin เป็นวัตถุ Spinner ของฉัน

@Override โมฆะสาธารณะ onItemSelected (AdapterView <?> parent, View view, int position, long id) {// TODO สร้างเมธอดอัตโนมัติ Stub String p = parent.getItemAtPosition (ตำแหน่ง) .toString (); int pos = (int) parent.getItemIdAtPosition (ตำแหน่ง); System.out.println ("ตำแหน่งของสปินเนอร์ ... " + pos); setSearchView (ตำแหน่ง); }

ถ้าฉันทำสิ่งนี้กว่ารายการสปินเนอร์จะไม่แสดง

8
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

ในเค้าโครงของคุณ:

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />

แต่แล้วคุณจะได้รับรายการที่เลือกอย่างไร?
ยกเลิกการใช้งาน

1
TypeCast แรกในไฟล์ Java จากนั้นใช้สปินเนอร์สปินเนอร์ สปินเนอร์ = findViewById (R.id.spinner); spinner.setOnItemClickListener (AdapterView OnItemClickListener ใหม่ () {@Override โมฆะสาธารณะ onItemClick (AdapterView <?> parent, View view, int position, long id) {}});
ZIA ANSARI

5

โดยทั่วไปโค้ดนี้อ่านออบเจ็กต์อาร์เรย์ JSON และแปลงแต่ละแถวเป็นตัวเลือกในสปินเนอร์ที่ส่งผ่านเป็นพารามิเตอร์:

public ArrayAdapter<String> getArrayAdapterFromArrayListForSpinner(ArrayList<JSONObject> aArrayList, String aField)
{
    ArrayAdapter<String> aArrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item);
    aArrayAdapter.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item); //android.R.layout.simple_spinner_dropdown_item
    try {
        for (int i = 0; i < aArrayList.size(); i++)
        {
            aArrayAdapter.add(aArrayList.get(i).getString(aField)); 
        }
    } catch (JSONException e) {
        e.printStackTrace();
        ShowMessage("Error while reading the JSON list");
    }
    return aArrayAdapter;       
}

2

เพิ่มสปินเนอร์ในเค้าโครง XML จากนั้นเพิ่มโค้ดนี้ในไฟล์ Java:

Spinner spinner;
spinner = (Spinner) findViewById(R.id.spinner1) ;
java.util.ArrayList<String> strings = new java.util.ArrayList<>();
strings.add("Mobile") ;
strings.add("Home");
strings.add("Work");
SpinnerAdapter spinnerAdapter = new SpinnerAdapter(AddMember.this, R.layout.support_simple_spinner_dropdown_item, strings);
spinner.setAdapter(spinnerAdapter);

1

เพิ่มรหัสนี้หลังจากอัปเดตรายการ

สมมติ:

ArrayAdapter <String> ชื่อตัวแปรเป็นDataAdapterและชื่อตัวแปรรายการเป็นคีย์

  • dataAdapter.addAll (คีย์);
  • dataAdapter.notifyDataSetChanged ();

1

หากต้องการเพิ่มอีกหนึ่งรายการในSpinnerคุณสามารถ:

ArrayAdapter myAdapter = 
  ((ArrayAdapter) mySpinner.getAdapter());

myAdapter.add(myValue);

myAdapter.notifyDataSetChanged();

"UnsupportedOperationException" เกิดขึ้น
abbasalim

0

เพียงแค่ล้างอะแดปเตอร์เพิ่มรายการทั้งหมดและแจ้งการเปลี่ยนแปลงดังต่อไปนี้:

  public void show(List<Object> objLIst) {
    adapter.clear();
    adapter.addAll(objLIst);
    adapter.notifyDataSetChanged(); }

0

วิธีที่ง่ายกว่าคือการใช้ไลบรารีสปินเนอร์วัสดุ: https://github.com/jaredrummler/MaterialSpinner

อันดับแรกเพิ่มในโครงการของคุณ:

compile 'com.jaredrummler:material-spinner:1.2.4'

และใช้สิ่งนี้:

<com.jaredrummler.materialspinner.MaterialSpinner
    android:id="@+id/spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

และรหัส java ที่คุณสามารถเพิ่มรายการใน java ได้อย่างง่ายดาย:

MaterialSpinner spinner = (MaterialSpinner) findViewById(R.id.spinner);
spinner.setItems("item 1", "item 2", "item 3", "item 4", "item 5");
spinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {

  @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
    Snackbar.make(view, "Clicked " + item, Snackbar.LENGTH_LONG).show();
  }
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.