2013-07-12 51 views
1

我有一個微調控制setOnItemSelectedListener在我的應用程序,當我選擇一個項目的微調,事件onItemSelected將被啓動。 現在我希望點擊一個按鈕來啓動onItemSelected事件,我該怎麼辦?謝謝! onItemSelected爲您的微調如何單擊按鈕啓動微調控件的ItemSelected事件?

spinnerFolder.setOnItemSelectedListener(new OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
       //Do Business Logic 
      }   
      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
      } 
     }); 
+0

你怎麼知道哪個項目從微調目標?它會是當前選定的項目嗎? – gunar

+0

這是當前選定的項目 – HelloCW

回答

1

只需撥打您的按鈕偵聽以下幾點:

spinnerFolder.getOnItemSelectedListener().onItemSelected(spinnerFolder, spinnerFolder.getSelectedView(), spinnerFolder.getSelectedItemPosition(), spinnderFolder.getSelectedItemId()); 

這就是全部:-)

+0

這不是一個「乾淨的代碼!」 :P – gunar

+0

嗯,這是觸發請求事件的最短途徑。 ;)這是這裏的實際問題!如果從體系結構的角度來看另一個對象的事件觸發一個對象的事件是合理的,那當然就是另一個討論了。 – a11n

0

的第三個參數(INT ARG2)是位置,這樣你就可以通過

String selection = (String) mSpinnerAdapter.getItem(position); 

獲得當前的選擇或使用mSpinner.getItemAtPosition(position)如果你沒有自定義適配器。

將當前選擇存儲在某處並在onClickListener中爲您的按鈕選取它。

0

當您需要用一些數據的微調,你將有一些排序列表對象(字符串,自定義對象,等等)在SpinnerAdapter,你會保持對它的引用該列表,我們稱之爲:private List<Object> dataList = ...

首先,我將創建一個能夠處理特定的數據對象的方法: 保護無效doBusinessLogic(對象MyObj中){// 做,讓你快樂 的事情}

然後從聽衆稱這個爲:

spinnerFolder.setOnItemSelectedListener(new OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
       // args2 is the position from backed data list 
       doBusinessLogic(dataList.get(args2)); 
      }   
      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
      } 
     }); 

然後從按鈕收聽你會再次調用上面的方法,但對象的索引,你會得到來自spinnerFolder.getSelectedItemPosition();

myButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       int dataIndex = spinnerFolder.getSelectedItemPosition(); 
       doBusinessLogic(dataList.get(index)); 
      } 
     });