问题
When programming for Android sometimes you have to use static methods. But when you try to access you resources in a static method with getString(R.string.text)
you'll get an error. Making it static doesn't work.
Does anyone knows a good way around this? The resource files in Android are very helpful for creating things in different languages or making changes to a text.
回答1:
One way or another, you'll need a Context for that... For static methods this probably means you need to pass along a Context when calling them.
回答2:
You could use Resources.getSystem().getStringArray(android.R.array.done);
回答3:
This is how I access resources from inside static methods. Maybe not ideal, but.
First, I extend Application and set some public static field(s), and create a method to initialise them:
public class MyApp extends Application {
// static resources
public static String APP_NAME;
public static void initResources(Context context) {
APP_NAME = context.getResources().getString(R.string.app_name);
}
}
And in my manifest I register the extended Application:
<application
android:name=".MyApp"/>
In my starter activity (MainActivity), I make a call to initialise the static resources:
@Override
protected void onCreate(Bundle savedInstanceState) {
MyApp.initResources(this);
}
Then anywhere in your project, after MainActivity.onCreate(Bundle b) has run, you can call static methods that access your specified static resources:
public static void printAppName() {
Log.w("tag", "my app name: " + MyApp.APP_NAME);
}
回答4:
Pass in a Context
(i.e. Activity
) instance as a parameter object to static method. Then invoke getString
on the parameter.
回答5:
The post below gives a tip for creating an Application
class to save your current context. Your new Application
class will then be accessible from any other static method.
How can I get a resource content from a static context?
回答6:
One way is you can pass context to your static method. check this out it definitely works
public class Sounds {
public static MediaPlayer getSoundTouch(Context context){
return MediaPlayer.create(context, R.raw.touch);
}
public static MediaPlayer getSoundLeak(Context context){
return MediaPlayer.create(context, R.raw.leak);
}
public static MediaPlayer getSoundFinish(Context context){
return MediaPlayer.create(context, R.raw.finish);
}
}
来源:https://stackoverflow.com/questions/3822732/android-getstringr-string-in-static-method