spinner的各類監聽

setOnItemClickListener和setOnClickListener都不能用來監聽Spinner,不然會出錯。 setOnLongClickListener能用來監聽Spinner的長按事件,只能監聽Spinner被長按住,好像基本用不上。 setOnTouchListener能用來監聽Spinner控件的觸摸事件,注意一次快速的觸摸都能觸發這事件好幾回。 setOnHierarchyChangeListener用來監聽顯示在Spinner上面的view的變化的,須要重寫兩個方法。當點擊Spinner選擇一個item時會觸發這個監聽,若是選擇的是一個不一樣的item,會執行方法onChildViewRemoved-----onChildViewAdded-----onChildViewRemoved。當選擇的item沒變化時。執行onChildViewRemoved---onChildViewAdded。 用方法spinner.removeAllViewsInLayout()能夠清除Spinner控件上顯示的信息,會觸發setOnHierarchyChangeListener的onChildViewRemoved方法,當清除Spinner控件上顯示的信息後再點擊Spinner控件選擇Item,若是選擇的item和以前顯示的item是同一個,那麼執行onChildViewAdded---onChildViewRemoved---onChildViewAdded,而且Spinner上面顯示的信息將變成第0個信息。若是不是同一個Item,那麼onChildViewAdded---onChildViewRemoved---onChildViewAdded---onChildViewRemoved。 setOnItemSelectedListener監聽Spinner裏面的item選項的選擇事件,重寫兩個方法,當選擇時觸發onItemSelected方法,可是,若是選擇的item和選擇前的item是同一個,那麼此方法將不會被觸發。第二個方法是onNothingSelected,我測試了不少次,觸發不了這個方法,不知道在什麼狀況下觸發,若是誰知道,請教我,謝謝! 我嘗試給Spinner的item寫監聽(我用的BaseAdapter,在getView方法中給要返回的View監聽),發現長按監聽setOnLongClickListener和短按監聽setOnClickListener都能監聽Spinner的item,但寫了監聽後Spinner的setOnItemSelectedListener監聽被覆蓋掉了,被選中的Item可以點擊到,也就是說item和Spinner控件浮在同一個View,點擊Spinner中間的Item是不會觸發Spinner的點擊只會觸發Item的點擊。 但若是用setOnTouchListener來監聽Item就不會覆蓋setOnItemSelectedListener監聽,但當咱們點擊Spinner時也要注意,若是點擊的區域在Item區域,同樣會觸發setOnTouchListener監聽,若是點擊的是綠色區域外則不會觸發setOnTouchListener。(如上圖)。 通過學習發現,SpinnerAdapter的子類BaseAdapter有一方法getDropDownView,此方法用來顯示全部下拉出來的Item,而getView方法是用來顯示Spinner上面的一個Item,而getDropDownView默認返回值是getView的返回值,這就意味着能夠把本來寫在getView中的代碼寫在getDropDownView中,監聽也寫在此,getView中保留除監聽之外的代碼,這樣當點擊Spinner時不再會觸發點擊Item的效果了,但仍是隻能用setOnTouchListener監聽,由於長按和短按監聽會覆蓋setOnItemSelectedListener監聽。
相關文章
相關標籤/搜索