我剛剛冒險進入Android開發的有趣世界,但在我正在開發的測試應用程序中遇到了一個非常古怪的問題。如何避免android子組件中的重複ID?
該應用程序使用TableLayout,其中每個TableRow包含一個EditText和一些按鈕。
TableRows可以在運行時添加和刪除。這一切似乎工作正常,直到我意外地傾斜我的設備。顯示屏響應並重新排列了佈局,但突然,每行中的所有值都是相同的。
經過一番摸頭之後,我想清楚發生了什麼事。由於Android重新啓動活動導致方向發生變化。發生這種情況時,Android會嘗試保存並恢復您的實例狀態,但它通過存儲與組件ID相關的數據來實現此目的。
在我的情況下,因爲行都是從同一個佈局創建的,所以每行的EditText都有相同的ID。據我所知,結果是,當信息被保存時,每行都被覆蓋,以便最後一行勝出。
恢復時,只有一個值與該id相關聯,因此它會應用於每一行!
在我的情況下,我能夠解決這個問題,因爲我根本不需要保留這些值。在我的onSaveInstanceState中,我不會調用super.onSaveInstanceState,並且同樣在onRestoreInstanceState中。
這樣最終使我想起我的問題!
如果我想要保存和恢復這些單獨的行值,該怎麼辦?是否有一種可接受的方式來生成重用組件的獨特標識(在我的例子中是TableRow)?
您是否找到了解決方案?我也有同樣的問題。 – 2013-10-06 01:05:37
就像我說的,我實際上並不需要保留這些值,但根據您的目標API級別,您可以嘗試使用View.generateViewId()http://developer.android。com/reference/android/view/View.html#generateViewId%28 – xtempore 2013-10-06 08:07:56