2009-10-31 34 views
6

Tôi có một Android Spinner và tôi muốn nhận lại cuộc gọi khi người dùng chọn thứ gì đó từ hộp thoại bật lên của nó. Có vẻ như setOnItemClickListener() hoặc setOnItemSelectedListener() sẽ là phương pháp phù hợp để sử dụng nhưng không được gọi khi tôi chọn một trong các mục trong trình quay tròn.Cách nhận lại cuộc gọi khi hộp thoại bật lên Spinner bị loại bỏ?

Có cách nào đúng để thực hiện việc này không?

CẬP NHẬT

mỗi gợi ý commonsware, tôi đã làm những điều sau đây, nhưng phương pháp onItemSelected() của tôi là không bao giờ được gọi là:

final Spinner spinner = (Spinner) findViewById(R.id.spinner); 

    spinner.setAdapter(new ArrayAdapter<SettingValue>(getContext(), android.R.layout.simple_list_item_1, android.R.id.text1, setting.getSettingValues())); 
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      Log.d("BOOGA"); 
      final SettingValue settingValue = (SettingValue)parent.getSelectedItem(); 
      final Editor edit = getContext().getSharedPreferences(PREFS_CONTEXT_NAME, Context.MODE_PRIVATE).edit(); 
      edit.putString(setting.name(), settingValue.name()); 
      edit.commit(); 
     } 

     public void onNothingSelected(AdapterView<?> parent) { 
      // do nothing 
     } 

    }); 

Trả lời

1

Sử dụng setOnItemSelectedListener(). Đây là một trong số của tôi book examples:

/*** 
    Copyright (c) 2008-2009 CommonsWare, LLC 

    Licensed under the Apache License, Version 2.0 (the "License"); you may 
    not use this file except in compliance with the License. You may obtain 
    a copy of the License at 
     http://www.apache.org/licenses/LICENSE-2.0 
    Unless required by applicable law or agreed to in writing, software 
    distributed under the License is distributed on an "AS IS" BASIS, 
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    See the License for the specific language governing permissions and 
    limitations under the License. 
*/ 

package com.commonsware.android.selection; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class SpinnerDemo extends Activity 
    implements AdapterView.OnItemSelectedListener { 
    TextView selection; 
    String[] items={"lorem", "ipsum", "dolor", "sit", "amet", 
        "consectetuer", "adipiscing", "elit", "morbi", "vel", 
        "ligula", "vitae", "arcu", "aliquet", "mollis", 
        "etiam", "vel", "erat", "placerat", "ante", 
        "porttitor", "sodales", "pellentesque", "augue", "purus"}; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     selection=(TextView)findViewById(R.id.selection); 

     Spinner spin=(Spinner)findViewById(R.id.spinner); 
     spin.setOnItemSelectedListener(this); 

     ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items); 

     aa.setDropDownViewResource(
      android.R.layout.simple_spinner_dropdown_item); 
     spin.setAdapter(aa); 
    } 

    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 
     selection.setText(items[position]); 
    } 

    public void onNothingSelected(AdapterView<?> parent) { 
     selection.setText(""); 
    } 
} 
+1

Cảm ơn mã đó, phần mềm commonsware. Tôi đã thử nó và nó không làm việc cho tôi. Trình nghe 'onItemSelected()' không bao giờ được gọi vì một lý do nào đó. Xem cập nhật của tôi ở trên. Bất kỳ ý tưởng? – emmby

+0

Bạn không sử dụng mã của tôi cả. Nếu bạn so sánh hai, bạn sẽ thấy rằng bạn không sử dụng tài nguyên Spinner trong tham số thứ hai cho hàm tạo ArrayAdapter của bạn và bạn cũng không cung cấp tài nguyên thả xuống cho bộ điều hợp đó. Sửa hai thứ đó và xem điều đó có làm rõ vấn đề của bạn hay không. Nếu không, hãy tìm những khác biệt khác. – CommonsWare

+10

Đây là mã rất hữu ích nhưng nó không bao gồm trường hợp người dùng 'hủy bỏ' spinner (tức là chạm bên ngoài spinner để đóng nó). Mã Spinner gốc có lỗ hổng lớn - không có sự kiện nghe hoặc gọi lại để mở hoặc đóng cửa sổ bật lên hoặc hộp thoại. Ví dụ, thay đổi tiêu đề spinner dựa trên popup mở hoặc đóng (có thể thay đổi một mũi tên hoặc một cái gì đó) có vẻ không thể. – Batdude

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