2017-08-20 14 views
-1

我需要得到resource IDstring如何從字符串獲取資源ID中的Andriod

String s = "R.raw.button5"; 

final MediaPlayer mp2 = MediaPlayer.create(this,Integer.valueOf((s)); 
+4

歡迎來到SO。 **我們在這裏幫助你的代碼**,如果你還沒有嘗試過任何東西,那麼我們幫不了什麼忙。請參考SO的[tour](https://stackoverflow.com/tour)並閱讀[幫助頁面](https://stackoverflow.com/help)以瞭解如何提出問題。 – Syfer

回答

1

您可以使用則getIdentifier(....)。如果你有一個ID爲「R.id.button5」的按鈕,那麼這是你的代碼。

int id = getResources().getIdentifier("button5", "id", context.getPackageName()); 
final MediaPlayer mp2 = MediaPlayer.create(this,id); 
0

你可以從資源名稱的資源ID與getIdentifier()

則getIdentifier

INT則getIdentifier(字符串名稱,
字符串DEFTYPE,
字符串defPackage)

返回給定資源名稱的資源標識符。完整的 限定資源名稱格式爲「package:type/entry」。如果在這裏指定defType和defPackage,則第一個 兩個組件(包和類型)是可選的。

注意:不鼓勵使用此功能。 通過標識符而不是按名稱檢索資源要高效得多。

獲取資源的原始ID,您可以使用類似:

Context context = getContext(); // base context or application context 
int resId = getResources().getIdentifier("button5", "raw", 
            context.getPackageName()); 

// Or 
int resId = getResources().getIdentifier("raw/button5", null, 
            context.getPackageName()); 

但你要記住,如文檔的說明說,你最好使用預先生成的資源ID,而不是從獲得資源名稱。這是因爲getIdentifier()需要時間來找到匹配的資源名稱,如下面的代碼(從Resources):

public int getIdentifier(String name, String defType, String defPackage) { 
    if (name == null) { 
     throw new NullPointerException("name is null"); 
    } 
    try { 
     return Integer.parseInt(name); 
    } catch (Exception e) { 
     // Ignore 
    } 
    return mAssets.getResourceIdentifier(name, defType, defPackage); 
} 

另一個原因是,硬編碼的資源名稱與R.raw.button5是一個維護的噩夢。因爲將來你有可能改變這個名字,那麼你最終會得到一個指向無處的資源名稱。