如果它是一个类字段,如何获取R.string值而不是硬编码值?

时间:2017-07-05 22:59:29

标签: java android xml string resources

例如,我想采取这个

public class SomeClass {
    public static final String GREET_STRING = "Hello!";
    //...

并将其更改为:

public class SomeClass {
    public static final String GREET_STRING = getString(R.string.greet_string);
    //...

可以这样做还是我需要某种Context实例化来获取字符串加载的资源?

3 个答案:

答案 0 :(得分:0)

要使用google.script.url.getLocation(function(location) { var params = location.parameter; var param1 = params.param1; var param2 = params.param2; // Use parameters... }); ,您需要一个上下文。资源字符串不能是getString(),因为更改区域设置时可能会更改字符串资源(如果您有多个字符串文件,例如static finalstrings.xml (us)

答案 1 :(得分:0)

试试这个:

public abstract class SomeClass extends AppCompatActivity {

    public static String GREET_STRING(Context context) {
        if (context == null) {
            return null;
        }
        return context.getResources().getString(R.string.greet_string);
    }
}

RES /值/字符串:

<resources>
    <string name="greet_string">Hello!</string>
</resources>

从MainClass调用SomeClass

public class MainClass extends SomeClass {
    private final static String TAG = MainClass.class.getName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // call SomeClass from MainClass
        Log.i(TAG, SomeClass.GREET_STRING(this));
    }
}

答案 2 :(得分:0)

有两种方法可以访问类中没有扩展Activity或Fragment的字符串。

  1. ContextActivity传递给类构造函数

    public class SomeClass {
        private Context context;
        public SomeClass(Context context) {
            this.context = context;
        }
        public static final String GREET_STRING = context.getString(R.string.greet_string);
    }
    
  2. 第二种方式是如果你不想将上下文传递给类。您需要创建Application和静态函数get实例的实例。

    public class App extends Application {
            private static App instance = null;
            @Override
            public void onCreate() {
                super.onCreate();
                instance = this;
            }
            public static App getInstance() {
                // Return the instance
                return instance;
            }
    }       
    
    public class SomeClass {
            public static final String GREET_STRING = App.getInstance().getString(R.string.greet_string);
        }