【问题标题】:Howto access the main res/layout/ files from a sub package?如何从子包中访问主要的 res/layout/ 文件?
【发布时间】:2011-09-02 09:28:58
【问题描述】:

这也是一个设计问题。我不知道设计有许多活动的最佳方式,以及如何在仍然访问应用程序资源的同时将它们分解成包。

我有一个应用程序,它允许用户登录并访问一个选项卡式活动,该活动可以访问许多模块。如果他们单击一个模块,他们将加载该模块,该模块又包含一个选项卡式活动。

目前我在这个应用程序中有 3 个包:

  • com.appname.app(我想拆分的许多活动、登录、模块列表等)
  • com.appname.app.XML(xml 处理程序)
  • com.appname.app.Utils(静态实用程序类等)

我想添加一个新包来包含我的所有模块,例如

  • com.appname.app.Modules(甚至是每个模块的单独包)

但是如果不使用完整的包名(例如setContentView(com.appname.app.R.layout.channel_list);)引用它们,我将无法再访问主要应用程序资源

显然,在任何com.appname.app 活动中,我只是通过setContentView(R.layout.channel_list); 引用布局等资源。

我原以为子包(子目录)应该可以访问父级的资源,而不必使用com.appname.app.R.layout.channel_list 而不是R.layout.channel_list。这就是为什么我假设我的设计有问题

同样的问题也适用于访问字符串、可绘制等资源...

我确定这是我所缺少的非常基本的东西。我试过手动导入“父”包,但也没有用。

这就是我应该做的事情吗?或者我应该以某种方式在每个模块包中创建资源文件?或者我应该以其他方式处理我的应用程序的设计/拆分?

【问题讨论】:

  • 你试过了吗 - import com.appname.app.R;

标签: java android resources import package


【解决方案1】:

由于 Android 预编译器会编译所有对 R.class 文件的引用并将其放入主包中,因此没有比显式导入资源更好的方法了

import com.appname.app.R;

因此不需要完整的限定符。

【讨论】:

  • 干杯有效,但与 import android.R; 冲突后删除它就可以了
  • 更有意义。我并没有真正看过 R.java 文件,只是一目了然地看到了静态整数。在正确地“查看”它之后,我看到它是一个我只需要按照你说的导入的类。我只是不确定我是否在设计方面完全错误。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2010-12-13
  • 1970-01-01
  • 2012-07-18
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多