Как генерировать идентификатор в 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;
}
Другие вопросы по тегам