如何在Android中的Java类中使用字符串资源?

36
在我的Java课程中,我想要使用来自strings.xml的字符串资源。
为此,我想要使用类似于以下代码:
getString(R.string.address)

如果我的类是一个活动(Activity),那么它可以工作。 但是如果我的类只是一个简单的Java类,我该如何使用它呢?

如果你的项目是一个Android项目,那么你肯定可以使用它。你试过了吗?试着使用它然后告诉我们。 - Android Killer
4
我好奇你选择那个答案的逻辑是什么。 - Dave Newton
4个回答

52

一个类没有上下文,如果要使用字符串资源,则需要一个上下文。因此,只需从活动中调用类并提供参数context,在您的类构造函数中使用该上下文获取字符串资源。

在自定义类中,您需要导入项目的R命名空间以获取资源ID。

import com.myrandomapp.R;

那么要获取实际的字符串

context.getString(R.string.COOL_STRING)

17
这个答案不完整 - 要完善对于那些仍有疑问的人,你需要导入R命名空间以获取资源ID。例如)import com.myappdomain.R(在此处使用你自己的命名空间)然后获取实际字符串 context.getString(R.string.SOME_STRING) - Roy Hinkley
1
@AndroidAddict +1 给你,你救了我一次头疼! - Paranoid Android

17

您可以将Activity类的上下文传递给Java类并访问资源.

来自您的Activity类

 Helper helper = new Helper(this);

您的Java类

public class Helper {

    Helper(Context c){
        c.getString(R.string.address);
    }
}

13
你可以在你的自定义 Application 类中创建一个静态的 Application Context
public class App extends Application{

    private static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();
    }

    public static Context getContext(){
        return mContext;
    }
}

然后,您只需要调用 App.getContext().getResources() 方法即可获取任何资源值。

请记住,这个 ContextApplication 类型的,所以有些情况下这个 Context 不适合使用。要了解更多信息,请阅读 此文


Android Studio 抱怨静态字段中的 Context 对象存在内存泄漏 - 现在你会以不同的方式处理吗? - ATJ

-1

如果您添加了这行代码,您就可以完成了:

// this is the object itself, and idString is the ID String bound to the literal.
this.getString(R.string.idString)

希望这个评论对你有所帮助!

敬礼。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接