I can't claim that this is what Romain meant, but I've done this sort of
thing a few times. Here's a snippet of code from a game I'm working on:
Resources resources = context.getResources();
FlowerColor[] flowerColors = FlowerColor.values();
String packageName = context.getPackageName();
for (int i = 0; i < flowerColors.length; i++) {
int flowerId = resources.getIdentifier("flower_" +
flowerColors[i].toString().toLowerCase(), "drawable", packageName);
flowerBitmaps[i] = BitmapFactory.decodeResource(resources, flowerId);
}
Of course, it needs to be done sparingly because its so inefficient compared
to using the static constants. In this case I'm building a cache of bitmaps
- compared to the image decompression it probably matters little. Its often
possible to cache the identifiers looked-up in this way in a static integer
array anyway.
Tom.
2009/4/25 Sahil Arora <[email protected]>
> Hi Roman,
> Can you please give a brief idea about using Package manager's API to
> simplify my code??
>
> Thanks in advance.
>
> Best Regards,
> Zhubham
>
>
> On Fri, Apr 24, 2009 at 6:25 PM, Romain Guy <[email protected]> wrote:
>
>>
>> You don't have to use reflection, you can use the package manager's
>> APIs to create ids from strings (and the other way around.)
>>
>> On Fri, Apr 24, 2009 at 5:54 AM, MrSnowflake <[email protected]>
>> wrote:
>> >
>> > If you really want to use a for loop (for maintenance point of view,
>> > somewhat, as TextView1...10 aren't very clear) you need to use
>> > reflection which is a lot of work for this and it's slow.
>> > For your purpose you should consider creating your layout fully in
>> > code.
>> >
>> > On 24 apr, 14:30, Mark Murphy <[email protected]> wrote:
>> >> Zhubham wrote:
>> >> > Hi Experts,
>> >>
>> >> > I am trying to optimize the following code:
>> >>
>> >> > textview[0]=(TextView)findViewById
>> >> > (R.id.TextView1);
>> >> > textview[1]=(TextView)findViewById(R.id.TextView2);
>> >> > textview[2]=(TextView)findViewById(R.id.TextView3);
>> >> > textview[3]=(TextView)findViewById(R.id.TextView4);
>> >> > textview[4]=(TextView)findViewById(R.id.TextView5);
>> >> > textview[5]=(TextView)findViewById(R.id.TextView6);
>> >> > textview[6]=(TextView)findViewById(R.id.TextView7);
>> >> > textview[7]=(TextView)findViewById(R.id.TextView8);
>> >> > textview[8]=(TextView)findViewById(R.id.TextView9);
>> >> > textview[9]=(TextView)findViewById(R.id.TextView10);
>> >>
>> >> > using:
>> >>
>> >> > int j;
>> >> > for(int i=0;i<10;i++)
>> >> > {
>> >> > j = i+1;
>> >> > textViewId = "TextView"+j;
>> >> > textview[i] =
>> (TextView)findViewById(R.id.textViewId);//
>> >> > error textViewId not recognized
>> >> > }
>> >>
>> >> > but this is giving error at the last line.. Can you please help me to
>> >> > come out of this.
>> >>
>> >> 1. There is nothing named R.id.textViewId in your layout, in all
>> likelihood.
>> >>
>> >> 2. Putting things in loops does not optimize the code, from an
>> execution
>> >> speed standpoint.
>> >>
>> >> 3. You cannot dynamically construct the name of a widget ID in the
>> >> manner you are trying.
>> >>
>> >> --
>> >> Mark Murphy (a Commons Guy)http://commonsware.com|
>> http://twitter.com/commonsguy
>> >>
>> >> _The Busy Coder's Guide to Android Development_ Version 2.0 Available!
>> > >
>> >
>>
>>
>>
>> --
>> Romain Guy
>> Android framework engineer
>> [email protected]
>>
>> Note: please don't send private questions to me, as I don't have time
>> to provide private support. All such questions should be posted on
>> public forums, where I and others can see and answer them
>>
>>
>>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---