我有一個圖庫,它允許用戶瀏覽圖庫,選擇圖像作爲他們的選擇,並繼續瀏覽圖庫而不更改該選擇。這可以通過使用onItemSelected來查看他們正在選擇的圖像(即點擊)是否已經被選擇的圖像(通過圖庫的運動)。所以:改變方向後圖庫調用onItemSelected
- 用戶在Gallery中前後移動。
- 用戶決定自己喜歡的圖像並將圖庫置於其上。
- 用戶單擊圖像,它將被「選中」並被賦予綠色邊框。
- 用戶可以繼續前進或後退到圖庫中,而不會自動「選擇」當前居中的圖像。
這很好。但是,我現在試圖在選擇圖像時允許方向更改,並且我發現在所有onConfigChanged代碼執行完畢後,在Gallery上調用onItemSelected。
所以onConfigChange我設置參數(即在方向改變之前畫廊在哪個索引上),然後我調用我的initialiseUI方法。這將成功執行,並設置所需的所有內容,包括將Gallery定位在與定位更改前相同的索引處。但是,在中心圖像上調用onItemSelected。這會導致居中圖像被選爲他們的選擇(綠色邊框等),而不需要用戶點擊它。
我嘗試使用布爾標誌「configIsChanging」,以便只在configIsChanging爲false時執行onItemSelected代碼。不幸的是,這似乎並不奏效,因爲onItemSelected在onConfigChange完成之後被調用,並且到那時該標誌已被重置爲false。
@Override
public void onConfigurationChanged(Configuration newConfig) {
configChanging = true;
tempConfigDisplayedIndex = mGallery.getSelectedItemPosition();
super.onConfigurationChanged(newConfig);
setContentView(R.layout.take_questionnaire);
initialiseUI();
configChanging = false;
}
有沒有人有任何有關流氓onItemSelected事件的經驗?有任何想法嗎?如果需要,我可以發佈更多的代碼。非常感謝您的幫助。
是的,我已經這樣做了,但是我的Activity比上面解釋的代碼更復雜。它遍歷許多「問題」,每個問題都有一組圖像作爲潛在答案,用戶必須爲每個問題選擇一個。除非我在代碼中處理配置更改,否則方向更改將使用戶回到第一個問題。 – breadbin 2012-04-16 11:19:21
我明白問題的原因,但這些可能會幫助您更好地進行調試:http://developer.android.com/guide/topics/manifest/activity-element.html#config和http://stackoverflow.com/questions/456211 /活動的重啓上旋轉機器人。這個想法是在onRetainNonConfigurationState – josephus 2012-04-16 11:29:48
上使用onSavedInstanceState,我會看看,謝謝。 – breadbin 2012-04-16 11:31:52