2010-03-24 40 views
14

tôi có EditText, một nút và một spinner. Khi nhấp vào nút, trình quay sẽ thêm một mục mới có tên bạn đã nhập trong EditText. Nhưng đây là câu hỏi, adapter.add của tôi() phương pháp dường như không hoạt động ... ở đây là mã của tôi:cách thêm mục vào ArrayAdapter của Spinner?

public class Spr extends Activity { 
Button bt1; 
EditText et; 
ArrayAdapter<CharSequence> adapter; 
Spinner spinner; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    bt1 = (Button)this.findViewById(R.id.bt1); 
    et = (EditText)this.findViewById(R.id.et); 
    spinner = (Spinner)this.findViewById(R.id.spr); 

    adapter = ArrayAdapter.createFromResource(
      this, R.array.planets_array, android.R.layout.simple_spinner_item); 

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    spinner.setAdapter(adapter); 

    bt1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      String temp = et.getText().toString(); 

      adapter.add(temp); 
      adapter.notifyDataSetChanged(); 
      spinner.setAdapter(adapter); 

     } 
    }); 


    spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){ 

     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, 
       int pos, long id) { 

      Toast.makeText(parent.getContext(), "The planet is " + 
         parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 

     }}); 
} 

}

cảm ơn! ... vẫn đang chờ

+0

Bạn chắc chắn don' t cần gọi lại spinner.setAdapter() trong View.OnClickListener của bạn. Mã của bạn trông giống như nó sẽ làm việc, mặc dù. – synic

+1

Bạn cũng không cần phải gọi 'notifyDataSetChanged()'. Chỉ cần 'adapter.add()' là đủ. Khi bạn nói "không hoạt động", ý bạn là gì? – CommonsWare

+0

tôi đã tìm ra câu trả lời, và ai đó nói với tôi, gọi notifyDataSetChanged() và setAdapter() một lần nữa có thể được trợ giúp. Tôi thêm nó, nhưng nó vẫn không hoạt động ... khi tôi chạy nó, và nhấn nút .it sẽ nhảy ra một lỗi: ứng dụng đã ngừng un expectedly.please thử lại ... (tôi nghĩ rằng vấn đề là trên phương pháp spinner.add().) cảm ơn sự giúp đỡ của bạn! – allen

Trả lời

1

Tôi tin rằng điều này đang hoạt động như được thiết kế, nhưng không như mong đợi. ArrayAdapter được sử dụng để chỉ lấy một mảng, nhưng hàm tạo danh sách được thêm vào sau. Tôi đoán nó chỉ làm một toArray() trong danh sách của bạn. Đây là lý do tại sao bạn phải gọi thêm trên bộ điều hợp hoặc tạo bộ điều hợp mới khi Danh sách của bạn thay đổi.

14

Khi bạn đã tạo ArrayAdapter của bạn, bạn chưa gán một danh sách có thể thay đổi được, vì vậy khi bạn thêm() nó không thể tăng kích thước của nó và ném ra một UnsupportedOperationException.

Hãy thử một cái gì đó như thế này:

List<CharSequence> planets = new ArrayList<CharSequence>(); 
adapter = new ArrayAdapter<CharSequence>(context, 
         R.array.planets_array, planets); 
//now you can call adapter.add() 

Bạn nên sử dụng một danh sách. Với một mảng như CharSequence [], bạn sẽ nhận được ngoại lệ UnsupportedOperationException tương tự.

3

Javi là đúng trừ khi không tham chiếu mảng cho tham số thứ hai.

adapter = new ArrayAdapter<CharSequence>(this, 
    android.R.layout.simple_spinner_item, 
    someList); 
0

bạn có thể tạo một ArrayList và sao chép tất cả trông cậy vào đối tượng này sau đó tạo arrayadaptor và gửi ArrayList này và trong OnClickListener khuy áo, thêm nội dung EditText để ArrayList đối tượng sau đó gọi notifydatasetchanged của adator

Các vấn đề liên quan