Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android R.java背后的概念是什么?_Android_Architecture_Android Resources_R.java File - Fatal编程技术网

Android R.java背后的概念是什么?

Android R.java背后的概念是什么?,android,architecture,android-resources,r.java-file,Android,Architecture,Android Resources,R.java File,在android中,R.java用于提供对XML文件中定义的资源的访问。 要访问资源,我们需要调用findviewbyd()方法,传递要获取的资源的id 这与Spring类似,Spring在XML上下文中定义bean,并使用应用程序上下文获取bean上下文.getBean(“beanId”) 这提供了松散耦合,因为bean是在外部定义的,可以在不修改代码的情况下进行更改 这让我感到困惑。虽然Android的功能与spring相似,但它有什么优势 拥有一个中间的R.java有什么意义?难道我们不能

在android中,R.java用于提供对XML文件中定义的资源的访问。 要访问资源,我们需要调用
findviewbyd()
方法,传递要获取的资源的id

这与Spring类似,Spring在XML上下文中定义bean,并使用应用程序上下文获取bean<代码>上下文.getBean(“beanId”)

这提供了松散耦合,因为bean是在外部定义的,可以在不修改代码的情况下进行更改

这让我感到困惑。虽然Android的功能与spring相似,但它有什么优势

  • 拥有一个中间的R.java有什么意义?难道我们不能通过使用资源直接从XML获取资源吗 读取器/应用程序上下文。e、 g.
    findViewById(“资源ID”)
  • 没有任何松耦合。既然R.java中的引用是自动生成的,那么如何删除一个资源并放入一个新资源呢
  • 它遵循什么设计模式(如果有)
  • 使用IOC(比如Roboguice)注入资源不是更好吗?为什么谷歌决定给我们这样的机会 一种使用资源的奇特方式
  • 请原谅我的无知。我是一个Java新手,一次尝试了太多东西。:-) 感谢所有的反馈。

    android.R.java不仅仅是存储XML ID的地方。它还包含对资源的访问,例如可绘图、布局、字符串、数组,以及基本上可以在参考资料中声明的任何内容

    我个人认为它在使用Eclipse时很有用。我可以简单地键入
    findViewById(R.id.
    ),Eclipse将显示一个工具提示,其中包含可供选择的选项列表

    然而,在平台级别,我要说的是,硬编码的id变量有助于防止在使用字符串标识资源时出错——这是编程时(或编译时,而不是运行时)可以调试的东西。

    这种比较感觉有点(实际上)奇怪,因为你比较这两种机制是基于这样一个事实,即它们使用命名的东西来做事情。对于资源加载,例如,看看在
    .Net
    世界中如何处理资源


    它提供编译时检查资源是否可用。因为如果不可用,则
    R.java
    中不会有指向它的静态文件。在Spring示例中,如何确保有一个名为
    beanId
    的bean?但它不提供检查资源类型是否正确的功能

    为什么这不是松散的?只要新资源具有相同的名称,它将生成相同的静态常量。在Spring中,您将不得不使用相同的bean名称

    设计模式?无。它只是通过命名资源,然后仅按名称引用它们,而不是直接从它们的真实位置加载它们,从而增加了一个间接层次


    实际上,资源是注入的,因为资源加载必须与本地化相适应。请参阅Android的工作方式;在
    .Net
    世界中,附加的文化被打包到卫星程序集中;将根据当前文化加载正确的文化。

    最大的优势在于本地化和提供替代资源不同屏幕尺寸的ces

    e、 g您可以拥有字符串资源
    R.String.myname
    这可以是在
    /values en/strings.xml
    中用英语定义的,也可以是在
    /values es/strings.xml
    中用西班牙语定义的

    系统将根据您只需要在布局文件中使用
    @string/myname
    或在代码中使用
    R.string.myname
    的区域设置来处理或拾取正确的文件

    类似地,您可以在中定义纵向和横向的两个布局文件

    res/layout/mylayout.xml
    res/layout-land/mylayout.xml
    
    在代码中,您只需指定R.layout.mylayout以扩大layout.Resource manager 如果设备处于横向模式,则在布局栏中拾取文件


    手动执行此操作将是一场噩梦——因此需要R文件,它还包含对资源的访问,例如id、绘图、布局、字符串、数组,以及基本上可以在参考资料中声明的任何内容。

    非常同意。我认为编译时检查是值得的。编译时安全性是我喜欢J的原因之一ava优于其他动态语言。:-)感谢您对StackOverflow的贡献。考虑阅读关于如何回答问题的条目。如经上所记,你的回答本身并不是一个完整的答案。它指的是其他问题的上下文。考虑一个完整的R.java列表,而不仅仅是其他海报的内容。我只想提两遍你的问题,这是一个非常有趣的问题。