2015-07-03 5 views
0

Время от времени я хочу заполнить список элементами, статичными, что/где - лучший способ сохранить эти статические элементы?Пользовательские объекты XML для Android

Я обычно использую XML-ресурс с чем-то вроде этого:

<string-array name="category_ids"> 
    <item>0</item> 
    <item>1</item> 
    <item>2</item> 
</string-array> 

<array name="category_titles"> 
    <item>@string/category_all</item> 
    <item>@string/category_new</item> 
    <item>@string/category_hot</item> 
</array> 

<array name="category_icon_ids"> 
    <item>@null</item> 
    <item>@drawable/ic_category_star</item> 
    <item>@drawable/ic_category_thumb</item> 
</array> 

я получить доступ к этим массивам и заполнить адаптер с пользовательскими объектами. Но меня это раздражает каждый раз, когда я его использую. Когда я изменяю порядок в списке, например, мне нужно изменить каждый массив в xml.

Есть ли лучшее решение? Поддерживаются ли пользовательские объекты XML?

ответ

2

Иногда при работе с пользовательскими объектами, которые могут отличаться, доступ к этим элементам и их заполнение адаптером может быть очень напряженным.

Вместо этого вы можете использовать json для обработки более сложных объектов, чем с помощью простых массивов.

Вот пример реализации JSon:

В /res/raw папке:

Загрузка данных в вашем классе:

InputStream jsonStream = context.getResources().openRawResource(R.raw.countries); 
JSONObject jsonObject = new JSONObject(Strings.convertStreamToString(jsonStream)); 
JSONArray jsonContries = jsonObject.getJSONArray("countries"); 
List<CountryVO> countries = new ArrayList<CountryVO>(); 
for (int i = 0, m = countries.length(); i < m; i++) { 
    JSONObject jsonCountry = countries.getJSONObject(i); 
    CountryVO country = new CountryVO(); 
    country.setCountryName(jsonCountry.getString("country")); 
    String co = jsonCountry.getString("countryCode"); 
    country.setCountryCode(co); 
    try { 
     Class<?> drawableClass = com.example.R.drawable.class; // replace package 
     Field drawableField = drawableClass.getField(co); 
     int drawableId = (Integer)drawableField.get(null); 
     Drawable drawable = getResources().getDrawable(drawableId); 
     country.setCountryFlag(drawable); 
    } catch (Exception e) { 
     // report exception 
    } 
    countries.add(country); 
} 

Если вы не хотите, чтобы сделать вручную разобрав, вы можете использовать gson для передачи объектов и загрузки чертежей.

Источник: https://stackoverflow.com/a/9809772/1549700

2

да, вы можете иметь свой обычай xml, хранящегося под res/xml/, но в этом случае доступ содержание не совсем бесплатно. Вы можете использовать getResources().getXml(R.xml.name_of_file), чтобы получить экземпляр XmlResourceParser, который вы должны использовать для анализа xml

Смежные вопросы