Làm cách nào để thêm các mục vào một con quay trong Android?


107

Làm thế nào để thêm các mục vào một con quay?


1
Nếu bạn muốn thêm động thêm các mục vào danh sách của bạn và gọi adapter.notifyDataSetChanged ()
Asok Buzz

Câu trả lời:


144

Tệp XML:

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

Tệp 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);
    }
}

Xem ví dụ về spinner .


7
Mặc dù về mặt lý thuyết, điều này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo.
Bill the Lizard vào

sử dụng android.R.layout.simple_spinner_dropdown_item này thay cho android.R.layout.simple_spinner_item này có vẻ tốt hơn rất nhiều
sai Gorantla

Array_spinner là gì? tên của mảng là arraySpinner. nó có lỗi chính tả không hay nó chỉ phải như vậy thôi>
SurajS

1
Hãy xem xét thêm adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);(trước s.setAdapter(adapter);để làm cho giao diện thả xuống tốt hơn.
ban-địa kĩ thuật

1
@StephenM thay đổi liên kết
pankajagarwal

99

Tôi đã tìm thấy một tùy chọn khác: định nghĩa con quay trong tệp bố cục

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

Định nghĩa các mục trong tệp array.xml:

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

Liên kết đến nguồn đầy đủ của mã


Tôi đã thử tất cả các phương pháp ở trên và một số hướng dẫn khác, nhưng đây là cách duy nhất phù hợp với tôi. Cảm ơn bạn rất nhiều!
snapplex

Rất vui khi được giúp bạn @snapplex;)
maxivis

1
Đây phải là câu trả lời hàng đầu. Dọn dẹp.

30

Hãy thử mã này:

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

Bạn cũng có thể thêm giá trị mục spinner thông qua tệp xml mảng chuỗi ..

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

Trong 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

Để thêm mục trong Spinner, bạn có thể làm một việc, thử tạo một bộ điều hợp và sau đó thêm / xóa các mục vào bộ điều hợp, sau đó bạn có thể dễ dàng liên kết bộ điều hợp đó với spinner bằng setAdapter()phương pháp.

Đây là một ví dụ:

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

thanx cho câu trả lời của bạn. Tôi đã nhận được giải pháp cũng bây giờ tôi đang đối mặt với một vấn đề về nó.

Tôi muốn tìm nạp mục đã chọn của spinner tức là vị trí của nó vì tôi muốn chuyển nó sang phương thức khác xem những gì tôi đã làm ... dataspin.setOnItemSelectedListener (new myitemlistener ());

dataspin là đối tượng Spinner của tôi

@Override public void onItemSelected (AdapterView <?> Parent, View view, int position, long id) {// TODO Phương thức được tạo tự động String p = parent.getItemAtPosition (position) .toString (); int pos = (int) parent.getItemIdAtPosition (vị trí); System.out.println ("vị trí của spinner ..." + pos); setSearchView (pos); }

nếu tôi làm điều này thì mục spinner không hiển thị

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

Trong bố cục của bạn:

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

nhưng sau đó làm thế nào để bạn có được mục đã chọn?
Đã hạ giá

1
TypeCast đầu tiên trong tệp Java. Sau đó sử dụng con quay Spinner; spinner = findViewById (R.id.spinner); spinner.setOnItemClickListener (new AdapterView.OnItemClickListener () {@Override public void onItemClick (AdapterView <?> parent, View view, int position, long id) {}});
ZIA ANSARI

5

Mã này về cơ bản đọc một đối tượng mảng JSON và chuyển đổi mỗi hàng thành một tùy chọn trong spinner được truyền dưới dạng tham số:

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

Thêm một con quay vào bố cục XML, rồi thêm mã này vào tệp 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

Thêm mã này sau khi cập nhật danh sách

Giả sử:

Tên biến ArrayAdapter <String> là dataAdapter và tên biến List là các khóa .

  • dataAdapter.addAll (khóa);
  • dataAdapter.notifyDataSetChanged ();

1

Để thêm một mục nữa vào Spinner, bạn có thể:

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

myAdapter.add(myValue);

myAdapter.notifyDataSetChanged();

Đã xảy ra "UnsupportedOperationException"
abbasalim

0

Nó chỉ để xóa bộ điều hợp, thêm tất cả các vòng lặp và thông báo thay đổi như bên dưới:

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

0

Một cách dễ dàng hơn là sử dụng thư viện material spinner: https://github.com/jaredrummler/MaterialSpinner

trước tiên hãy thêm vào dự án của bạn:

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

và sử dụng như thế này:

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

và mã java mà bạn có thể thêm các mục trong java thật dễ dàng:

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();
  }
});
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.