2013-05-07 66 views
2

以及即時通訊新的Android中的編程,我覺得有點與微調選擇失去... 我發現與相同,但他們都不適合我的目的,一些問題:微調onItemSelected保持所謂的一遍又一遍的

objectSpinner = (Spinner) findViewById(R.id.objectSpinner); 
objectSpinner.setOnItemSelectedListener(MainActivity.this); 


@Override 
public void onItemSelected(AdapterView<?> adapterView, View view, 
     int position, long position2) { 

    Object object = adapterView.getAdapter().getItem(position); 
    Log.d("Spinner", "itemSelected: " + position + " - Object: " + object); 

    menuLayout = new View(this); 

    if (object instanceof Filter) { 
     Filter mFilter = (Filter) object; 
     setAdapterFilter(mFilter); 

    } 

} 

繼承人我把所有的數據設置到微調器的方法(微調器的數據它最初加載在onCreate方法,但它可以根據用戶從微調器選擇的項目而改變,所以onItemSelected將其調用一遍又一遍再次...)

public void setAdapterFilter(Filter filter) { 
    frameLayout.removeAllViews(); 
    if (filter != null) { 
     menuLayout = inflater.inflate(R.layout.filter, null); 
     TextView typeTxt = (TextView) menuLayout 
       .findViewById(R.id.type_txt); 
     typeTxt.setText(filter.getType()); 

     frameLayout.addView(menuLayout, 0); 
    } 

    ArrayAdapter<Filter> filterAdapter = new ArrayAdapter<Filter>(this, 
      android.R.layout.simple_spinner_item, filterArrayList); 
    objectSpinner.setAdapter(filterAdapter); 

} 

主要問題是:如何改變Spinner的行爲?我只需要onItemSelected事件觸發點擊(觸摸)時,而不是當適配器設置和數據加載時觸發。

+0

你在哪裏設置了微調器適配器? – TronicZomB 2013-05-07 14:58:25

+0

在onCreate方法的開始處,我使用了setAdapterFilter方法,並將null作爲參數 – 2013-05-07 15:15:31

回答

1

OnItemSelected總是在第一次設置adapter時調用。 AFAIK,沒有辦法阻止這種情況的發生。你可以做的就是在你的Activity中設置一個boolean標誌,並且在你的監聽器第一次運行之後將它設置爲true,並且當它是假的時候不要運行裏面的代碼。

使用onFocusChangeListener可以讓您傾聽Spinner以獲得焦點,並在焦點時做或不做某事。但我仍然認爲簡單地使用一個標誌將是最簡單的

+0

在Spinner聚焦時是否有另一種方法捕獲事件?或者至少點擊而不是選擇? – 2013-05-07 15:14:01

+0

是的,我編輯過。我不認爲'Spinner'有''onClick()'下拉菜單 – codeMagic 2013-05-07 15:18:40

+0

非常感謝你解決了這個問題......有些人告訴我和你一樣,用最簡單的方式使用標誌,但我想解決它一些其他的方式只是爲了學習。 – 2013-05-07 15:27:52

相關問題