我已阅读[问题15557913] :( How to reference a string in strings.xml of an Android library in code?)和 How to reference a string from another package in a library using XML in Android?
但我仍感到困惑.... 如果我理解正确的话,应用程序的R和库中的一个被合并,因此即使在库中使用带有应用程序上下文的R,我也应该得到我的资源....
(在评论之后,我现在发布原始程序流程),所以我有
UtilsApp/app -in fact a test app for the utils
/nohutils/../src/../Command.java collection of utils e.g. this class
/res
NohFibu/app
/src with the MainActivity e.g. context...
/res
/jfibu/src../FibuCommand extends Command library of utils building on nohutils
/res
MainActivity:
package com.nohkumado.nohfibu;
import com.nohkumado.nohfibu.R;
public class MainActivity extends Activity implements MsgR2StringI
{
....
ShellI console = null;
....
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
....
if (console == null) console = new Shell(this);
else console.setContext(this);
....
HashMap<String,CommandI> cmds = new HashMap<String,CommandI>();
cmds.put("1", new EditJrlCmd(console));
cmds.put("2", new EditKplCmd(console));
... etc ...
@Override
public String msg(int stringid)
{
try
{
return(getResources().getString(stringid));
}
catch (Resources.NotFoundException e)
{ Log.e(TAG, "not found message : " + stringid);}
return("MSGNOTFOUND");
}
...
现在我在FibuCommand中有一个方法:
package com.nohkumado.jfibu.commands;
public class FibuCommand extends Command
{
public FibuCommand(ShellI s)
{
super(s);
}// public EditJrlCmd()
public String msg(int resourceId)
{
MsgR2StringI msger = (MsgR2StringI) shell.get("msger");
return(msger.msg(resourceId));
}// public String msg(String m)
和最后:
package com.nohkumado.nohutils;
public class Command implements CommandI
{
....
protected ShellI shell = null;
...
public Command(ShellI s)
{
shell = s;
}// public Command()
package com.nohkumado.nohutils;
public class Shell implements ShellI,OnEditorActionListener,OnKeyListener
{
....
protected MsgR2StringI context = null;
....
public Shell(MsgR2StringI c)
{
super();
context = c;
....
}// public Shell()
现在当我尝试调用msg(R.string.nofibuobj)时;我的IDE告诉我'com.nohkumado.nohutils.R.string'的未知成员'nofibuobj'错误 但是如果我写了msg(com.nohkumado.jfibu.R.string.nofibuobj),IDE会停止抱怨,但是在exe时间我会得到一个丑陋的MSGNOTFOUND ....
但是在com.nohkumado.nohfibu包的上下文中的com.nohkumado.jfibu.com包中调用了msg方法,该方法继承自com.nohkumado.nohutils包的类。
我只想要一个包com.nohkumado.jfibu(和子包)来访问com.nohkumado.jfibu.R.string中的资源....如何实现?
提前谢谢! 乙答案 0 :(得分:0)
确定, 而不是将msg方法放在FibuCommand中,我将它放入应用程序的MainActivity,它的工作原理....不能说为什么
为了缩短调用,我必须明确地导入库项目的R,即使文档说我不应该,但它是摆脱完全限定命名的唯一方法......
答案 1 :(得分:0)
&#34;问题&#34;是MainActivity
和FibuCommand
在不同的Java包中。我建议你了解一下包和import
声明。
请注意,还有另一个名为R
的类。这通常与MainActivity
位于同一个包中。确切的包名称在AndroidManifest.xml
中声明为package
标记中的<application>
属性,或build.gradle
中applicationId
中的defaultConfig
。每当您在与此根包不同的包中创建类时,您必须具有import
的{{1}}语句。这实际上与使用来自不同包的任何其他类没有什么不同。