3

我正在尝试为视图生成随机 ID,如下面的屏幕截图所示。但它没有用。它为空。我应该如何 findViewById ?

在此处输入图像描述

4

6 回答 6

15

textView.setId(View.generateViewId())API 17 中引入的用法。

于 2017-01-04T04:07:54.317 回答
2
 TextView tv = new TextView(this);

这意味着您正在动态创建 TextView。所以你不需要这样做findViewByIdfindViewById当带有 id 的视图存在于 xml 文件中时使用。

删除TextView cloneTextView = (TextView) findViewById(randomNo)线。你的问题很模糊,我试着解释一下。

于 2014-08-05T11:57:08.463 回答
1

唯一标识符的最佳实践

爪哇

String uniqueID = UUID.randomUUID().toString();

科特林

var uniqueID = UUID.randomUUID().toString()
于 2021-08-05T08:42:18.423 回答
0

我有自己的解决方案...应该是这样的..

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);
        }
    }

它有效,这就是我想要的。谢谢你们。

于 2014-08-06T03:38:28.373 回答
0

这样的事情可能会奏效。

但我不确定可能的性能和内存问题,因为它会返回一个视图实例(如果找到)。在一个小的测试序列中,它从来没有碰到一个现有的 id,换句话说,第一个随机数总是没问题的。

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;
}
于 2014-11-04T22:58:19.390 回答
0

您可以按如下方式创建 UUID(通用唯一标识符):

String id= UUID.randomUUID().toString();
于 2019-02-24T10:02:51.803 回答