Thanks for your very helpful example, I'm trying to discover what an Adapter must do. For example, it must implement a getItem method, but are there any standard views that will call getItem? If i don't call it myself, could I simply throw an exception if it is called? I'm finding the reference documentation very terse, with only top-level code examples.
On Jan 31, 10:39 pm, Marco Schmitz <[email protected]> wrote: > /** > * Demonstrates how to write an efficient listadapter. Theadapter > used in this example binds > * to an ImageView and to a TextView for each row in the list. > * > * To work efficiently theadapterimplemented here uses two techniques: > * - It reuses the convertView passed to getView() to avoid inflating > View when it is not necessary > * - It uses the ViewHolder pattern to avoid calling findViewById() > when it is not necessary > * > * The ViewHolder pattern consists in storing a data structure in the > tag of the view returned by > * getView(). This data structures contains references to the views we > want to bind data to, thus > * avoiding calls to findViewById() every time getView() is invoked. > */ > public class List14 extends ListActivity { > > private static class EfficientAdapter extends BaseAdapter { > private LayoutInflater mInflater; > private Bitmap mIcon1; > private Bitmap mIcon2; > > public EfficientAdapter(Context context) { > // Cache the LayoutInflate to avoid asking for a new one each > time. > mInflater = LayoutInflater.from(context); > > // Icons bound to the rows. > mIcon1 = > BitmapFactory.decodeResource(context.getResources(), > R.drawable.icon48x48_1); > mIcon2 = > BitmapFactory.decodeResource(context.getResources(), > R.drawable.icon48x48_2); > } > > /** > * The number of items in the list is determined by the number > of speeches > * in our array. > * > * @see android.widget.ListAdapter#getCount() > */ > public int getCount() { > return DATA.length; > } > > /** > * Since the data comes from an array, just returning the index is > * sufficent to get at the data. If we were using a more complex data > * structure, we would return whatever object represents one row in > the > * list. > * > * @see android.widget.ListAdapter#getItem(int) > */ > public ObjectgetItem(int position) { > return position; > } > > /** > * Use the array index as a unique id. > * > * @see android.widget.ListAdapter#getItemId(int) > */ > public long getItemId(int position) { > return position; > } > > /** > * Make a view to hold each row. > * > * @see android.widget.ListAdapter#getView(int, android.view.View, > * android.view.ViewGroup) > */ > public View getView(int position, View convertView, ViewGroup parent) > { > // A ViewHolder keeps references to children views to > avoid unneccessary calls > // to findViewById() on each row. > ViewHolder holder; > > // When convertView is not null, we can reuse it directly, > there is no need > // to reinflate it. We only inflate a new View when the > convertView supplied > // by ListView is null. > if (convertView == null) { > convertView = > mInflater.inflate(R.layout.list_item_icon_text, null); > > // Creates a ViewHolder and store references to the > two children views > // we want to bind data to. > holder = new ViewHolder(); > holder.text = (TextView) convertView.findViewById(R.id.text); > holder.icon = (ImageView) convertView.findViewById(R.id.icon); > > convertView.setTag(holder); > } else { > // Get the ViewHolder back to get fast access to the TextView > // and the ImageView. > holder = (ViewHolder) convertView.getTag(); > } > > // Bind the data efficiently with the holder. > holder.text.setText(DATA[position]); > holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); > > return convertView; > } > > static class ViewHolder { > TextView text; > ImageView icon; > } > } > > @Override > public void onCreate(Bundle savedInstanceState) { > super.onCreate(savedInstanceState); > setListAdapter(new EfficientAdapter(this)); > } > > private static final String[] DATA = { > "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", > "Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au > Chablis", > "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre", ... > > 2009/1/31 skink <[email protected]>: > > > > > > > > > hi, > > > i want to create custom View showing possibly several items. > > > i think usingAdapterinterface would be good idea. > > > my question is: should i extend AdapterView? if so, what is the most > > imortant when doing this (e.g. AdapterView is ViewGroup, so how should > > i manage children)? > > > thanks, > > pskink --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---

