从类中调用getString(R.strings ....)?

Mar*_*ars 12 android class object android-context

有没有办法从单独的类中使用getString方法?

我有一个存储在我的字符串xml中的字符串,我想在一个对象中使用该字符串...但该方法在该对象中甚至不可用...

有小费吗?

小智 12

getString()是一种方法Context¹.如果你需要在一个单独的类(不扩展Context)中,通常最好将它作为需要它的方法的单独参数.

例:

public void logString(Context c, int stringId) {
    Log.d("TAG", c.getString(stringId));
}
Run Code Online (Sandbox Code Playgroud)

有一点很重要: 永远不要将上下文存储在单独的类中.
提供一个论点.否则,如果存储上下文的对象比上下文最初所属的对象(例如活动)长,则会泄漏内存并中断整个android生命周期.

¹ getString()也可以在Resources课堂上使用 - 您可以通过Context.getResources()


Mar*_*ars 9

这里的解决方案是确保您的对象具有对应用程序上下文的引用

Class Swag{
    private Context ctx;
    public Swag(Context ctx){
       this.ctx = ctx;
    }
    public void doSomething(){
        String something = ctx.getResources().getString(R.string.somestring);
        ...
    }
    // or like this
    public void makeUpperCase(Context appContext){
        appContext.getResources().getString(R.string.super_string_swag_yolo);
    }
}
Run Code Online (Sandbox Code Playgroud)

很明显,你必须在创建一个对象时或在调用方法时提供上下文


iCr*_*est 7

resouce文件:values/strings.xml

<resources>
   <string name="app_name">App name</string>
<resources>
Run Code Online (Sandbox Code Playgroud)

java的

import android.content.res.Resources;
Resources.getSystem().getString(R.string.app_name);//result : App name
Run Code Online (Sandbox Code Playgroud)