2012-08-09 34 views
2

我想问一下关于整个ID系统如何在android中工作的很多问题。我查阅了View文档,但对我的口味来说,描述太浅了。关于查看ID的问题一堆

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

  2. 如果我以编程方式设置ids,那么它是否会被上下文 类findViewById()函数找到?

  3. 如果对前一个问题的答案是肯定的,那么如果我想 创造了大量的意见,但我希望他们能有后来识别不同的IDS ,然后至极一个是更好地使用? (回答 这个问题,这将是非常有用的知道了 前两个答案)

    例如生成在尽可能大的范围内随机IDS:

    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例如填充使用一个列表中每个项目的预定义xml布局。然后你可以通过findViewById()得到getView()函数中的 子视图。所以我 假设,你列表中的所有相同的视图有 相同的ID。如果是这样,那么使用tag 属性来区分膨胀布局中的项目是否是一种好习惯?

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

回答

1
  1. @ + id/....创建一个id值,它位于应用程序名称空间中。将其与@android:id/....对比,它位于android命名空间中。

  2. 当您在代码中设置ID并将视图元素添加到布局时,它将变为可通过代码访问。您将无法从xml中引用它不知道您想要使用随机来生成您的ID吗?认为顺序会更好,但即使如此,随机ID的意义何在?你怎么知道你指的是哪个视图?

  3. 绝对使用标记选项,并期待使用ViewHolder模式来平滑滚动列表。如果您需要访问它,则可以将该ID添加到视图持有者类中,但无论如何通过用于填充列表的数据集都可以使用该ID。快速搜索将为您提供大量示例。

+0

嗨!随机/增加ID背后的基本思想是避免以某种方式添加重复的ID,而无需手动查找布局xml中的所有修复ID,并检查,如果新ID已经在其中。谢谢你的回答,但你能告诉我,这些id是如何产生的吗?据我所知,就像我的第二种选择:IDE选择一个随机数并添加一个新的ID。 – 2012-08-09 13:10:23

+0

如果你不添加一个ID,那么你将无法通过ID访问该视图。你有没有考虑给视图添加一个标签,然后通过标签访问?迭代通过孩子的选项是否可以找到你想要实现的解决方案?通常,如果您需要访问层次结构中的特定视图,则只需要一个id。如果视图是列表或网格类型父对象,那么您将通过适配器类来访问子视图,该适配器类将处理设置和检索有问题的视图。也许关于这个问题的上下文的进一步信息会有所帮助? – 2012-08-09 13:18:24

+0

我没有具体记住,我试图实现。事实是,问题出现了,当我为RadioButtons写封装类时,创建类似RadioGroup的东西而不是View,只是处理按钮检查状态。这个类处理,选择和取消选择按钮的RadioButtons,当我开始测试它与更大量的RadioButtons时,我需要生成ids dinamically。然后我开始怀疑这些问题。再次感谢您的帮助,我认为最重要的是,运行时生成的id可以通过findViewById()访问。 – 2012-08-09 13:36:16