web-dev-qa-db-ja.com

クラスからgetString(R.strings ....)を呼び出しますか?

別のクラスからgetStringメソッドを使用する方法はありますか?

文字列xmlに文字列が格納されていますが、その文字列をオブジェクトで使用したいのですが、メソッドはオブジェクトでも使用できません...

任意のヒント?

12
Mars

ここでの解決策は、オブジェクトにアプリケーションコンテキストへの参照があることを確認することです。

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);
    }
}

明らかに、オブジェクトを作成するとき、またはメソッドを調整するときにコンテキストを提供する必要があります

9
Mars

getString()Context class¹のメソッドです。個別のクラス(Contextを拡張しない)内で必要な場合は、通常、それを必要とするメソッドへの個別の引数として提供するのが最善です。

例:

_public void logString(Context c, int stringId) {
    Log.d("TAG", c.getString(stringId));
}
_

重要なことが1つあります:決してコンテキストを別のクラス内に格納します。
引数を指定します。そうしないと、コンテキストを格納するオブジェクトが元々コンテキストが属していたオブジェクト(アクティビティなど)よりも長く存続する場合、メモリリークが発生し、Androidライフサイクル全体が中断されます)。

¹getString()Resources クラスからも使用できます-Context.getResources()から取得できます

12
user658042

リソースファイル:values/strings.xml

<resources>
   <string name="app_name">App name</string>
<resources>

Java

import Android.content.res.Resources;
Resources.getSystem().getString(R.string.app_name);//result : App name
7
iCrazybest

編集:以下は機能しません。別のサイトでこれを読んで、機能すると思いましたが、アプリで試したところ、エラーが発生し続けました。問題は、コンパイルされますが、ランタイム例外が発生することです。

これは、任意のJavaクラス:

import Android.content.res.Resources

Resources.getSystem().getString(R.string.blah);
2
devo

コンテキストをパラメーターとして渡すことができない場合は、すべての静的データを配置する別のクラスを作成します。

例:

public class StaticData {
    public static String BASE_URL = "https://stackoverflowrocks.com";
}

staticData.BASE_URLを直接呼び出して、他のクラスからその文字列を取得します

素敵できれい。

0
JPhi Denis