Как генерировать идентификатор в Android случайно и программно?
Я пытаюсь сгенерировать случайные идентификаторы для представлений, как показано на следующем скриншоте. Но это не сработало. Это стало нулевым. Как мне найти ViewById?
6 ответов
У меня есть собственное решение... Так и должно быть..
Random r = new Random();
randomNo = r.nextInt(1000+1);
TextView textView = new TextView(this);
textView.setId(randomNo);
linearLayout.addView(textView);
int childCount = linearLayout.getChildCount();
for(int i=0;i<childCount;i++){
if(linearLayout.getChildAt(i).getId()==randomNo){
TextView cloneTextView = (TextView) linearLayout.getChildAt(i);
cloneTextView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
cloneTextView.setText("I'm a clone...!");
linearLayout.removeAllViews();
linearLayout.addView(cloneTextView);
}
}
Это работает, и это то, что я хочу. Спасибо вам всем.
Использование textView.setId(View.generateViewId())
введено в API 17.
Лучшие практики для уникальных идентификаторов
Джава
String uniqueID = UUID.randomUUID().toString();
Котлин
var uniqueID = UUID.randomUUID().toString()
TextView tv = new TextView(this);
Это означает, что вы создаете TextView динамически. Так что вам не нужно делать findViewById
, findViewById
используется, когда представление с идентификатором присутствует в файле XML.
Удалить TextView cloneTextView = (TextView) findViewById(randomNo)
линия. Ваш вопрос неопределенный, я пытался объяснить.
Вы можете создать UUID (универсальный уникальный идентификатор) следующим образом:
String id= UUID.randomUUID().toString();
Нечто подобное может сработать.
Но я не уверен в возможных проблемах с производительностью и памятью, поскольку он вернет экземпляр представления (если он найден). Во время небольшой тестовой последовательности он никогда не попадал в существующий идентификатор, другими словами, первое случайное число всегда было в порядке.
private int createUniqueId() {
int id = RandomUtils.nextInt();
while(findViewById(id) != null) {
//id is not unique, try another one...
id = RandomUtils.nextInt();
}
//return unique id
return id;
}