2012-12-11 56 views
4

我希望你能幫助我,我已經研究過我的案例,但沒有找到一個好的答案。我想比較一個變量的內容與所有現有資源的名稱(如果可能的話,只使用可繪製的資源)。比較每個資源的名稱與sqlite數據庫的變量的內容

問題簡而言之:如何將變量的字符串內容與所有資源名稱的列表進行比較,僅優先於可繪製資源?或者換句話說:如何獲得所有資源名稱的列表(包含字符串),優先級只能繪製資源?

案例: 我想顯示一個基於給定類型的符號。這種類型是從SQLite數據庫中檢索的。有許多符號存儲爲可繪製資源,它們都以可能的類型命名。對於數據庫中的每個存儲類型,我想在列表中顯示擬合符號。應該通過變量「type」和包含所有(可繪製)資源名稱的列表之間的比較(通過contains方法)找出相等性。

例如: 在數據庫中有名爲「A」,「B」和「C」的類型。在可繪製資源文件夾中是名稱爲「A」,「BX」和「S」的圖形。比較應該導致這樣的情況,即在列表中只有類型「A」與裝配可繪製符號「A」連接。類型「B」和「C」不可能命名爲可繪製資源,因此不應顯示任何符號。

我希望你能理解我的問題,並感謝你的幫助。

+0

你有什麼已經做了?因爲這是一個需求清單,而不是一個問題。 –

+0

我已經做了一個更長的研究在stackoverflow和通常通過谷歌。這不是要求列表,這是一個如何進行比較的問題。我希望在編輯之後,現在聽起來更像是一個問題。 – Elementary

+0

在這種情況下,我可能只是錯過了你的問題。幫我一個忙,並突出顯示它,最好是用問號結束。 –

回答

13

或換句話說:如何獲取所有 資源名稱的列表(包含字符串),優先級只能繪製資源?

這可能是你想要什麼:

Field[] fields = R.drawable.class.getFields(); 
String[] allDrawablesNames = new String[fields.length]; 
for (int i =0; i < fields.length; i++) {   
    allDrawablesNames[i] = fields[i].getName(); 
} 
+0

非常感謝,這就是我正在尋找的內容,我只是將String []更改爲列表,以便我可以輕鬆使用contains()方法進行比較。 – Elementary

1

對不起,我知道你正在尋找一個Java解決方案,但我沒有找到在StackOverflow上的C#和Xamarin問題的任何解決方案,所以我如果你不介意的話,會在這裏留下我的Android解決方案。

我在GitHub中發現了一個寫得很好的類ReflectionUtils,只是用它來調用這個方法。

private List<string> GetAllStrings() 
    { 
     IEnumerable<FieldInfo> fields = ReflectionUtils.GetAllFields(typeof(Resource.String)); 
     List<string> list = new List<string>(); 
     using (var enumerator = fields.GetEnumerator()) 
     { 
      try 
      { 
       while (enumerator.MoveNext()) 
       { 
        list.Add(enumerator.Current.Name); 
       } 
      } catch (Exception e) 
      { 
       // Handle exception. 
      } 
     } 
     return list; 
    } 
相關問題