我似乎无法在这里或其他地方找到一个好的答案,所以这里有。我创建了一个Master / Detail android应用程序,因此有两个包src
:
com.example.app
ItemDetailActivity.java
ItemDetailFragment.java
ItemListActivity.java
ItemListFragment.java
com.example.app.content
ItemContent.java
现在,我想要做的是将src/res/values/string.xml
资源中的格式化字符串添加到ItemContent.java
文件中。 strings.xml
文件已包含contact_information字符串。当我使用这一行时:
public CharSequence contact_information = getResources().getText(R.string.contact_information);
我得到The method getResources() is undefined for the type ItemContent
的Eclipse错误。当我使用相同的行时,ItemDetailFragment.java
它很好。我在内容包中缺少什么来允许我引用字符串?
答案 0 :(得分:2)
getResources()
方法是Context
方法:http://developer.android.com/reference/android/content/Context.html
如果ItemContent
未扩展Context
或其子类之一,则它将不具有getResources()
方法。解决此问题的一种方法是将context
引用传递给您的ItemContent
或对其发出的需要context
的调用。
修改:或者,正如@desseim在评论中建议的那样,将通过Resources
获得的getResources()
对象传递给需要它的方法,以避免无意中泄露Context
的可能性
几个例子:
// If you need the context for other things. If you don't keep the Context around as a
// class or instance variable, there should be no leaks.
public void foo(Context context){
Resources res = context.getResources();
// other code
}
将您的活动称为:
ItemContent itemContent = new ItemContent();
itemContent.foo(SomeActivity.this);
或者,有资源:
public void bar(Resources res){
String str = res.getString(R.somestring);
}
将您的活动称为:
ItemContent itemContent = new ItemContent();
itemContent.bar(getResources());