2

我想问很多关于整个 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 例如为ListView列表中的每个项目使用预定义的 xml 布局填充时会发生什么。然后,您可以getView()通过findViewById(). 所以我假设,您的列表项中所有相同的视图都具有相同的 ID。如果是这样,那么使用该tag 属性来区分膨胀布局中的项目是一个好习惯吗?

对这些问题的任何明确解释将不胜感激!

4

1 回答 1

1
  1. @+id/.... 创建一个存在于应用程序命名空间中的 id 值。将此与 @android:id/.... 进行对比,后者位于 android 命名空间中。

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

  3. 不确定你想使用随机生成你的 id 吗?认为顺序会更好,但即便如此,随机 id 的意义何在?你怎么知道你指的是哪个视图?

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

于 2012-08-09T09:25:01.503 回答