Spinner OnclickListener事件执行两次,如何处理这两个事件

Pan*_*mar 5 android spinner

Spinner OnclickListener事件执行两次 -

  • Spinner初始化
  • 用户手动选择

监听器的实现方式如下:

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

            }

            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
Run Code Online (Sandbox Code Playgroud)

问题定义

我想将用户选择的文本保存到数据存储中,当用户从微调器中选择任何项目时,我能够执行此操作.但我的另一项任务是将以前选择的项目(从数据存储中访问)显示为微调器中的选定项目,但每次调用微调器的活动时,微调器都会将第一项显示为默认选定项目,并且在数据存储中也会更改之前的项目项目为默认值.

如何区分"Spinner初始化"和"用户手动选择"事件?

Pan*_*mar 7

你必须逻辑地处理这两个事件.由于这些引用(Android Spinner选择,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.
            }
        });

    }

}
Run Code Online (Sandbox Code Playgroud)

希望它能清除你的怀疑.