что я бы сделал, так это создал CustomCursorAdapter, расширяющийся от CursorAdapter.
вот пример, который вы можете использовать :)
public class ContactListCustomCursorAdapter extends CursorAdapter {
private static final String TAG = ContactListCustomCursorAdapter.class.getName();
private LayoutInflater mInflater;
public ContactListCustomCursorAdapter(Context context) {
super(context, null, false);
mInflater = LayoutInflater.from(context);
}
В конструкторе вы можете получить layoutInflater для последующего надувания каждого представления.
@Override
public void bindView(View view, Context context, Cursor cursor) {
contactName = cursor.getString(cursor
.getColumnIndex(Contacts.DISPLAY_NAME));
currentId = cursor.getLong(cursor.getColumnIndex(Contacts._ID));
currentChar = contactName.substring(0, 1);
ViewHolder mHolder = (ViewHolder) view.getTag();
if (cursor.isFirst()) {
mHolder.header.setVisibility(View.VISIBLE);
mHolder.charHeader.setText(currentChar);
mHolder.fistContactBackground.setVisibility(View.VISIBLE);
mHolder.normalBackground.setVisibility(View.GONE);
} else {
cursor.moveToPrevious();
previousChar = cursor.getString(
cursor.getColumnIndex(Contacts.DISPLAY_NAME)).substring(0,
1);
if (collator.compare(currentChar, previousChar) != 0) {
mHolder.header.setVisibility(View.VISIBLE);
mHolder.charHeader.setText(currentChar);
mHolder.fistContactBackground.setVisibility(View.VISIBLE);
mHolder.normalBackground.setVisibility(View.GONE);
} else {
mHolder.header.setVisibility(View.GONE);
mHolder.fistContactBackground.setVisibility(View.GONE);
mHolder.normalBackground.setVisibility(View.VISIBLE);
}
cursor.moveToNext();
}
}
В представлении привязки я сделал это, чтобы узнать, имеет ли строка разницу с предыдущим именем и показывает ли случай заголовок разделителя.
@Override
public Object getItem(int position) {
}
В getItem вы можете вернуть объект или то, что необходимо для внешней операции, например, щелчок по элементу списка.
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = mInflater.inflate(R.layout.contact_row, parent, false);
ViewHolder refHolder = new ViewHolder();
refHolder.name = (TextView) view
.findViewById(R.id.contact_row_name_textView);
refHolder.setContactPhoto((ImageView) view
.findViewById(R.id.contact_row_photo_ImageView));
refHolder.header = (LinearLayout) view
.findViewById(R.id.contact_row_separator);
refHolder.charHeader = (TextView) view
.findViewById(R.id.contact_separator_char_textview);
refHolder.normalBackground = view.findViewById(R.id.normal_background);
refHolder.fistContactBackground = view
.findViewById(R.id.first_contact_background);
view.setTag(refHolder);
return view;
}
public static class ViewHolder implements ViewHolderInterface {
private LinearLayout header;
private TextView name;
private ImageView contactPhoto;
private TextView charHeader;
private View normalBackground;
private View fistContactBackground;
}
ViewHolder предназначен для ускорения поиска представления, а в newView вы устанавливаете компоненты и сохраняете их в объекте тега.
В вашей деятельности или фрагменте просто нужно установить курсор при его загрузке.
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor currentCursor) {
contactsAdapter.changeCursor(currentCursor);
}
Теперь вы можете фильтровать или что хотите, а курсор будет обрабатываться загрузчиком :)
С уважением.
person
Goofyahead
schedule
09.07.2012