一堆关于视图ID的问题

时间:2012-08-09 08:35:23

标签: android view

我想问一下很多关于整个id系统如何在android中运行的问题。我查看了View文档,但描述太浅了我的口味。

  1. 是否存在模式,IDE(Eclipse / Netbeans)如何生成ID 当我使用android:id="@+id/..."时?或者它是完全随机的?

  2. 如果我以编程方式设置ID,那么Context会找到它 课程findViewById()功能?

  3. 如果上一个问题的答案是肯定的,那么如果我愿意的话 创建大量的视图,但我希望它们具有不同的ID 为了以后识别,那么哪个更好用? (回答 这个问题,知道答案是非常有用的 前两个)

    例如,在最大可能范围内生成随机ID:

    Random random = new Random();
    for(int i=0; i<100; i++)
    {
        View view = new View(someContext);
        view.setId(random.nextInt(Integer.MAX_VALUE));
    }
    

    或者以某种顺序设置ID,例如:

    final int addToId = 5670;
    for(int i=0; i<100; i++)
    {
        View view = new View(someContext);
        view.setId(i+addToId);
    }
    
  4. 我也想知道,当你使用时,会发生什么 例如,LayoutInflater使用a填充ListView 列表中每个项目的预定义xml布局。然后你得到你的 getView() findViewById()函数中的子视图。所以我 假设您的所有列表中的所有相同视图都具有 同样的身份。如果是这样,那么使用tag是一个好习惯 属性来区分膨胀布局中的项目?
  5. 对这些问题的任何明确解释都将受到高度赞赏!

1 个答案:

答案 0 :(得分:1)

  1. @ + id / ....创建一个存在于应用程序命名空间内的id值。与@android:id / ....形成对比,它位于android命名空间中。

  2. 当你在代码中设置id并将view元素添加到布局时,它将可以通过代码访问。您将无法从xml

  3. 中引用它
  4. 不确定是否要使用随机生成ID?认为顺序会更好,但即便如此,随机ID的重点是什么?你怎么知道你指的是哪个观点?

  5. 绝对使用tag选项并查看使用ViewHolder模式以实现更平滑的列表滚动。如果需要访问它,可以将id添加到视图持有者类,但无论如何通过用于填充列表的数据集都可以使用它。快速搜索将为您提供大量示例。