簡體   English   中英

Android:靜態方法中的 getString(R.string)

[英]Android: getString(R.string) in static method

在為 Android 編程時,有時您必須使用靜態方法。 但是,當您嘗試使用getString(R.string.text)以靜態方法訪問資源時,您將收到錯誤消息。 讓它靜態不起作用。

有誰知道解決這個問題的好方法? Android 中的資源文件對於創建不同語言的內容或更改文本非常有幫助。

一種或另一種方式,你需要一個 Context ......對於靜態方法,這可能意味着你需要在調用它們時傳遞一個 Context 。

你可以使用Resources.getSystem().getStringArray(android.R.array.done);

這就是我從靜態方法內部訪問資源的方式。 也許不理想,但是。

首先,我擴展 Application 並設置一些公共靜態字段,並創建一個方法來初始化它們:

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

在我的清單中,我注冊了擴展應用程序:

<application 
  android:name=".MyApp"/>

在我的啟動活動 (MainActivity) 中,我調用初始化靜態資源:

@Override
protected void onCreate(Bundle savedInstanceState) {
  MyApp.initResources(this);   
}

然后在你的項目中的任何地方,在 MainActivity.onCreate(Bundle b) 運行后,你可以調用訪問你指定靜態資源的靜態方法:

public static void printAppName() {
  Log.w("tag", "my app name: " + MyApp.APP_NAME);
}

Context (即Activity )實例作為參數對象傳遞給靜態方法。 然后對參數調用getString

下面的帖子提供了創建Application類以保存當前上下文的提示。 然后可以從任何其他靜態方法訪問您的新Application類。

如何從靜態上下文中獲取資源內容?

一種方法是您可以將上下文傳遞給靜態方法。 看看這個它絕對有效

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

    }

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM