今天在工作上遇到的,本來只是個單純的連動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

arrow
arrow
    文章標籤
    spinner
    全站熱搜

    小羊 發表在 痞客邦 留言(0) 人氣()