2011-08-22 67 views
5

微調OnclickListener事件執行兩次 -微調OnclickListener事件執行兩次,如何處理這兩個事件

  • 微調初始化
  • 用戶手動選擇

這裏作爲實施聽衆的是:

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

      } 

      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 

問題定義

我要保存用戶選擇的文本到數據存儲,當用戶選擇從微調任何項目,我能夠做到這一點。但我的另一個任務是將先前選定的項目(從數據存儲訪問)顯示爲微調器中的選定項目,但是每次我調用微調控件的活動時,微調控制器都將第一項目顯示爲默認選定項目,並且在數據存儲中也會更改之前項目默認。

我怎樣才能使「手動選擇」用戶事件「微調初始化」之間的區別?

回答

7

你必須在邏輯上同時處理事件。由於這些參考文獻(Android Spinner selection,problem on spinner)表示您必須使用標誌變量來處理這個問題,所以我提供了一個代碼示例。

希望這將幫助你清除你的邏輯。

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. 
      } 
     }); 

    } 

} 

希望它能清除您的疑惑。

相關問題