Тип используемого вами адаптера должен зависеть от типа данных, которые вы пытаетесь представить. В идеале адаптеры - это очень тонкий объект, который связывает элементы из вашего набора данных в представления. ArrayAdapter обеспечивает это для небольших ограниченных наборов данных, CursorAdapter обеспечивает это для наборов данных, являющихся результатом запроса SQLite.
Не все наборы данных будут соответствовать формам, представленным предоставляемыми классами Adapter в платформе Android, но написать свой собственный легко. Представление списка всех положительных целых чисел является хорошим примером, потому что это вообще не должно включать взаимодействие с базовой моделью данных. Хотя поддержание скользящего окна в большом наборе данных может быть полезным подходом для некоторых данных, в этом нет необходимости.
Начиная с BaseAdapter
:
public class IntRangeAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private int mItemResource;
public IntRangeAdapter(Context context, int itemLayout) {
// We'll use this to generate new item layouts
mInflater = LayoutInflater.from(context);
// This is the layout resource we'll use for each item
mItemResource = itemLayout;
}
public int getCount() {
// Since this adapter presents all positive integers,
// we have Integer.MAX_VALUE items.
return Integer.MAX_VALUE;
}
public Object getItem(int position) {
// Each item is simply its position index.
return position;
}
public long getItemId(int position) {
// Our items won't change and we don't need stable IDs,
// so the position of an item is also its ID.
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
// Inflate a new item layout if we weren't given an existing
// one to reuse via the convertView parameter.
convertView = mInflater.inflate(mItemResource, parent, false);
}
// Find the TextView where we will label the item.
// (This can be optimized a bit for more complex layouts
// but we won't bother for this example.)
TextView tv = (TextView) convertView.findViewById(android.R.id.text1);
// Set the item text based on its position.
tv.setText("Item " + position);
return convertView;
}
}
Использование его из вашего опубликованного кода активности будет тогда означать изменение вашего setAdapter
вызова и удаление цикла для настройки данных:
this.setListAdapter(new IntRangeAdapter(this,
android.R.layout.simple_list_item_1));
Если вам нужна дополнительная информация об использовании ListViews, этот доклад из Google I / O 2010 дает хорошее представление: http://www.youtube.com/watch?v=wDBM6wVEO70