将字符串资源添加到主/明细模板的详细信息部分

时间:2014-02-06 21:45:46

标签: java android master-detail getresource

我似乎无法在这里或其他地方找到一个好的答案,所以这里有。我创建了一个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它很好。我在内容包中缺少什么来允许我引用字符串?

1 个答案:

答案 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());