Spinner OnclickListener событие выполняется дважды, как обрабатывать оба события


Событие Spinner OnclickListener выполняется дважды -

  • инициализация спиннера
  • пользователь, выбранный вручную

Где в качестве реализации слушателя выступает:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {           
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            }

            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

определение проблемы

Я хочу сохранить выбранный пользователем текст в хранилище данных, когда пользователь выбирает любой элемент из spinner, и я могу это сделать. Но моя другая задача состоит в том, чтобы показать ранее выбранный элемент (доступ из хранилища данных) как выбранный элемент в spinner, но каждый раз, когда я вызываю активность spinner, spinner показывает Первый элемент как выбранный по умолчанию элемент, а также в хранилище данных он изменяет предыдущий элемент на default.

Как я могу сделать разницу между событиями "инициализация Spinner" и "пользователь, выбранный вручную"?

2 5

2 ответа:

вы должны обрабатывать оба события логически. В качестве этих ссылок (Android Spinner selection, проблема на spinner) говорит, что вы должны использовать переменную flag для обработки этого, я ставлю образец кода.

Надеюсь, это поможет вам прояснить вашу логику.

public class TestActivity extends Activity {  

    //Checks report spinner selection is default or user selected item
    private boolean isDefaultSelection;
    //Spinner setup
    Spinner spinner;

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);

        // Set true at onCreate
        isDefaultSelection = true;

         spinner = (Spinner) findViewById(R.id.id_of_spinner);      
        ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String> (this, R.layout.drop_down_custom_row, data);
        //Implement custom view for drop down of spinner
        //spinnerAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(spinnerAdapter);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {          
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                if(isDefaultSelection) { //If spinner initializes
                    spinner.setSelection("Set_here_id_of_data_item_from_storage_which_was_previously_stored");
                    isDefaultSelection = false;
                } else { //If user manually select item
                    int itemPosition = spinner.getSelectedItemPosition();
                    //Write here code to store selection (itemPosition) of user into data storage
                }
            }

            public void onNothingSelected(AdapterView<?> parent) {
                //User selected same item. Nothing to do.
            }
        });

    }

}

Надеюсь, что это очистит ваши сомнения.

Вы можете вызвать setSelection одновременно с добавлением элементов в адаптер, см. Этот пример: Как избежать повторного вызова onItemSelected в Spinners