Maybe I'm going about this the wrong way, but if so, please correct me. Here is the situation: I have a query which returns URI strings for ringtones stored in a database. I have extended the SimpleCursorAdapter to override the getView() function to query the RingtoneManager for the TITLE of the associated ringer URI, however the getView() function is called more than once per row and slows my application down quite a bit. Is there a way I can run the function once to map uris to titles and store that data somewhere that the getView() can access the data quickly?
Related code snippets:
public String getRingerTitle(String uriString) {
Uri ringtoneUri = Uri.parse(uriString);
Ringtone r = RingtoneManager.getRingtone(this.context, ringtoneUri);
return r.getTitle(context);
}
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(this.layout, null);
}
this.cursor.moveToPosition(position);
String ringer = this.cursor.getString(this.cursor.getColumnIndex(PoolDbAdapter.KEY_RINGER));
TextView rTitle = (TextView) v.findViewById(R.id.ringer_line_item);
rTitle.setText(getRingerTitle(ringer));
return(v);
}
How can the getRingerTitle() function be optimized to cache the data or to only query for each item once? OR - is there a better way I should be approaching this?
Thanks