Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeArray in Android - How to store custom objects in xml and retrieve them?

Tags:

I have a class like

public class CountryVO {     private String countryCode;     private String countryName;     private Drawable countryFlag;          public String getCountryCode() {         return countryCode;     }     public void setCountryCode(String countryCode) {         this.countryCode = countryCode;     }     public String getCountryName() {         return countryName;     }     public void setCountryName(String countryName) {         this.countryName = countryName;     }     public Drawable getCountryFlag() {         return countryFlag;     }     public void setCountryFlag(Drawable countryFlag) {         this.countryFlag = countryFlag;     } } 

and want to store objects of this class in an TypeArray xml of android like

<resources>     <array name="custom_arr">         <item>             <countryName>Albania</countryName>             <countryCode>al</countryCode>             <countryFlag>@drawable/al</countryFlag>         </item>         <item>             <countryName>Algeria</countryName>             <countryCode>dz</countryCode>             <countryFlag>@drawable/dz</countryFlag>         </item>         <item>             <countryName>American Samoa</countryName>             <countryCode>as</countryCode>             <countryFlag>@drawable/as</countryFlag>         </item>         <item>             <countryName>India</countryName>             <countryCode>in</countryCode>             <countryFlag>@drawable/in</countryFlag>         </item>         <item>             <countryName>South Africa</countryName>             <countryCode>sa</countryCode>             <countryFlag>@drawable/sa</countryFlag>         </item>     </array> </resources> 

how i want to access this array in my Activty class like

TypedArray customArr = getResources().obtainTypedArray(R.array.country_arr);     CountryVO vo = new CountryVO();     vo.setCountryName(**value from array come here for first element's countryName attribute**);     vo.setCountryCode(**value from array come here for first element's countryCode attribute**);     vo.setCountryFlag(**value from array come here for first element's countryFlag attribute**); 

But i don't to how to achieve this. I tried customArr.getString(0); but it gives me everything as string like Albania al @drawable/al

Please help me to solve this problem.

Thanks a lot in advance,

With best regards, Ishan

like image 807
Ishan Avatar asked Jul 21 '11 10:07

Ishan


1 Answers

Here is example. Read it and look at the methods of TypedArray like get...() for example getDrawable(int index). I would suggest to keep items of the same type in separated arrays.

<array name="country">     <item>Albania</item>     <item>Algeria</item>     <item>American Samoa</item> </array> <array name="code">     <item>al</item>     <item>dz</item>     <item>as</item> </array> <array name="flag">     <item>@drawable/dz</item>     <item>@drawable/al</item>     <item>@drawable/as</item> </array> 

EDIT:

public CountryVO getCountryVO(int index){     Resources resources = getResources();     TypedArray country = resources.obtainTypedArray(R.array.country);     TypedArray code = resources.obtainTypedArray(R.array.code);     TypedArray flag = resources.obtainTypedArray(R.array.flag);      CountryVO vo = new CountryVO(country.getString(index), code.getString(index), flag.getDrawable(index));      country.recycle();     code.recycle();     flag.recycle();      return vo; } 
like image 135
pawelzieba Avatar answered Sep 23 '22 07:09

pawelzieba