今天在工作上遇到的,本來只是個單純的連動spinner
就在我輕鬆愉快的時做出來後才發現事情沒有這麼單純?
先說一下架構,有新增和修改頁面各一(明明就很單純OAO)
在新增時沒有甚麼問題 就是把第一個spinner的adpter設定好 然後丟過去
然後做一個onItemSelected的監聽,選取item時根據此item的id來產生第二個spinner的adpter
But
在編輯時就出了問題,我從DB把之前新增的值要設成spinner的預選
第一個spinner有設定成功,但是第二個就是一直沒辦法設定
始終是在第一個選項的位置
我試了好久 最後終於找到原因
兩個重點
1. OnItemSelectedListener在執行時會自動跑一遍onClick事件
(你沒去選spinner他還是會跑) 除非你加上spinner.setSelection(0, true)
2. OnItemSelectedListener這東西會擺在onCreate最後才執行
也就是說
雖然我把setOnItemSelectedListener寫在setSelection前面,但是在我設定完初選值後
他在跑setOnItemSelectedListener的onClick事件,所以造成第二個spinner的adpter重新載入
初選值也就變成了第一個位置了
最後附上解決方案
一樣有兩個辦法
1. 設定初值的時機改在onResume,這樣就會在setOnItemSelectedListener後才執行
2. 設定一個flag記錄是否為第一次進入程式,是的話就不重新取adpter
我後來是選擇了方法1,因為不想多一個變數XD
留言列表