2010-11-17 35 views
4

我很難管理微調,所以我可以要求您的幫助嗎?Android - Spinner:我如何區分用戶的操作與計算機在OnItemSelectedListener中的操作

我有一個微調器和它的適配器。 我在開始活動時用值列表初始化微調器。 然後我強制選定的值是我管理的對象中使用的值。

初始化屏幕後: 當用戶根據選定的值在微調器中選擇一個值時,我可以繼續(或不)到另一個活動,以便讓用戶選擇一個互補且必要的值。 如果用戶「取消」這第二個活動,我想將微調器回滾到其先前選定的值,並取消在此期間進行的一些操作。 如果用戶轉到第二個活動的末尾,一切都很好,我想用第二個活動中選擇的數據刷新微調框顯示(我重載了適配器中的getView方法來完成此操作)。總的來說,我可以很容易地做到這一點,但是,當我在我的活動開始時在微調框中強制選定的值,或者通過「取消」從第二個活動返回時,更改值事件是捕捉並且第二個活動被觸發(用戶根本沒有點擊任何東西)。

只有當微調控制器中所選值的變化是由用戶的手動操作引起的,並且當微調控制器的值爲的時候防止啓動相同的第二項活動時,您如何允許第二項活動被啓動在代碼中改變了「?

我嘗試了很多解決方案,因爲在適配器中設置了一個布爾值,它告訴是否由於「在代碼中」操作而引發下一個事件。 或者在適配器中添加一個布爾值來告訴適配器是否已經初始化了自己,並且在最後更改catched事件中強制該布爾值爲true。 但沒有什麼,真的很好。

謝謝你的幫助。

奧利弗

回答

4

我總是解決了這個問題與布爾標誌,它不是漂亮可言,但如果你認爲它通過它的工作原理。

的想法是多還是少,打造全球可用布爾與初始化,在onSelectedItemListener()使用布爾選擇羯羊或不觸發的動作,需要記住的重要事情是在計算機第一次自動選擇它之後將其設置爲true,並在onResume()方法中將其重置爲false。

這不完美,但它應該工作。

編輯:

bool spinnerUsable1; 
bool spinnerUsable2; 
int positionSpinner; 

public void onCreate(Bundle savedInstanceState){ 
    spinnerUsable1 = false; 
    spinnerUsable2 = true; 
    if(savedInstanceState != null){ 
     positionSpinner = savedInstanceState.getInt("posSpinner"); 
     if(positionSpinner != 0) spinnerUsable2 = false; 
    } 

    //Declare your spinner, set the on item selected lister 
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       boolean spinnerUsable = (spinnerUsable1 && spinnerUsable2); 
       if (!spinnerUsable1) { 
        spinnerUsable1 = true; 
       } else if (!spinnerUsable2) { 
        spinnerUsable2 = true; 
       } 
       if (spinnerUsable) { 
        //Action; 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // Nothing 
      } 
     }); 
} 

這樣的事情應該工作。

+0

謝謝。你能更精確地瞭解你切換布爾值的地方嗎?因爲如果我第一次在計算機中選擇布爾值(在微調初始值時),看起來這不起作用。這就是我在微調器的適配器內用布爾值嘗試的。當我調用setSelection(或接近的:-))時,spinner事件仍然被觸發,以強制微調器值,並且在這種情況下,我沒有看到這個(你的)解決方案基於布爾值如何看到它是不是用戶交互。 – Oliver 2010-11-19 09:24:43

+0

編輯我的答案。 – blindstuff 2010-11-19 13:59:27