开发者

Android: getString(R.string) in static method

开发者 https://www.devze.com 2023-01-17 22:00 出处:网络
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

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 c开发者_JAVA技巧reating things in different languages or making changes to a text.


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.


You could use Resources.getSystem().getStringArray(android.R.array.done);


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


Pass in a Context (i.e. Activity) instance as a parameter object to static method. Then invoke getString on the parameter.


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?


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

    }

 }
0

精彩评论

暂无评论...
验证码 换一张
取 消