(Это был комментарий к ответу дилетанта, но он слишком длинный ... хе-хе)
Конечно, статика здесь не нужна. Вы можете использовать SharedPreferences для сохранения вместо статического. В любом случае, причина заключается в том, чтобы сохранить текущий прогресс, чтобы он не был слишком медленным для сложных макетов. Потому что, на самом деле, после того, как его использовали один раз, это будет довольно быстро позже. Однако я не чувствую, что это хороший способ сделать это, потому что если вам придется перестраивать ваш экран снова (скажем, onCreate
снова вызывается), то вы, вероятно, все равно захотите начать сначала, исключая необходимость в статическом. Поэтому просто сделайте его переменной экземпляра вместо статического.
Вот уменьшенная версия, которая работает немного быстрее и может быть проще для чтения:
int fID = 0;
public int findUnusedId() {
while( findViewById(++fID) != null );
return fID;
}
Эта функция должна быть достаточной. Потому что, насколько я могу судить, сгенерированные Android идентификаторы исчисляются миллиардами, так что это, вероятно, вернет 1
в первый раз и всегда будет довольно быстрым.
Потому что на самом деле он не будет проходить мимо используемых идентификаторов, чтобы найти неиспользуемый. Тем не менее, цикл равен , если он действительно должен найти используемый идентификатор.
Однако, если вы все еще хотите сохранить прогресс между последующими воссозданиями вашего приложения и хотите избежать использования static. Вот версия SharedPreferences:
SharedPreferences sp = getSharedPreferences("your_pref_name", MODE_PRIVATE);
public int findUnusedId() {
int fID = sp.getInt("find_unused_id", 0);
while( findViewById(++fID) != null );
SharedPreferences.Editor spe = sp.edit();
spe.putInt("find_unused_id", fID);
spe.commit();
return fID;
}
Этот ответ на аналогичный вопрос должен рассказать вам все, что вам нужно знать об идентификаторах с Android: https://stackoverflow.com/a/13241629/693927
РЕДАКТИРОВАТЬ / ИСПРАВИТЬ: Просто понял, что я полностью облажался. Должно быть, я был пьян.