Я только что попал в увлекательный мир разработки под Android, но у меня возникла очень странная проблема с тестовым приложением, над которым я работал.
Приложение использует TableLayout, где каждый TableRow содержит EditText и некоторыеКнопки.
Табличные строки можно добавлять и удалять во время выполнения.Казалось, все работает нормально, пока я случайно не наклонил свое устройство.Дисплей отреагировал и переставил компоновку, но внезапно все значения были одинаковыми в каждом ряду.
После некоторого расчесывания головы я выяснил, что происходит.Из-за смены ориентации Android перезапускал активность.Когда это происходит, Android пытается сохранить и затем восстановить состояние вашего экземпляра, но делает это путем сохранения данных, относящихся к идентификатору компонента.
В моем случае, поскольку все строки создаются из одного и того же макета, тоEditText в каждой строке имеет одинаковый идентификатор.Насколько я могу судить, результат заключается в том, что при сохранении информации она перезаписывается для каждой строки, поэтому выигрывает последняя строка.
При восстановлении существует только одно значение, связанное с этим идентификатором, ипоэтому он применяется ко всем строкам!
В моем случае я смог обойти это, поскольку мне все равно не нужно было сохранять значения.В моем onSaveInstanceState я не вызываю super.onSaveInstanceState, а также в onRestoreInstanceState.
Так что, в конце концов, это подводит меня к моему вопросу!
Что если я ДЕЙСТВИТЕЛЬНО хотел, чтобы эти отдельные значения строк были сохраненыа восстановили?Есть ли приемлемый способ генерации уникальных идентификаторов на повторно используемых компонентах (в моем случае TableRow)?