Как получить обратный вызов, когда всплывающее диалоговое окно Spinner закрывается? - PullRequest
6 голосов
/ 31 октября 2009

У меня есть Android Spinner, и я хотел бы получить обратный вызов, когда пользователь выбирает что-то из всплывающего диалога. Кажется, что setOnItemClickListener() или setOnItemSelectedListener() будет правильным методом, но ни один из них не будет вызван, когда я выберу один из элементов в счетчике.

Есть ли правильный способ сделать это?

UPDATE

По предложению commonsware я сделал следующее, но мой onItemSelected() метод никогда не вызывается:

    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
        }

    });

1 Ответ

1 голос
/ 31 октября 2009

Используйте setOnItemSelectedListener(). Вот один из моих примеров книг :

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