Нумерация строк в ListView
Как вывести номер строки перед содержимым в ListView? Знаю, что можно получить getitemPosition, но в OnItemClick, но как выводить на экран не знаю.
Ниже код заполнения listView с помощью simpleCursorAdapter:
String[] lines = new String[] {"title", "status", "_id"};
cursor = mDB.query("requests", lines, "id_ins = ?", new String[] {String.valueOf(user)}, null, null, null);
cursorAdapter = new SimpleCursorAdapter(getContext(), R.layout.cursor_listview, cursor, lines, new int[]{R.id.title, R.id.status}, 0);
list.setAdapter(cursorAdapter);
Нужно в каждой строке выводит текущую позицию listView.
Ответы (2 шт):
Автор решения: woesss
→ Ссылка
Есть несколько вариантов это сделать. Один из них: у старых добрых Simple- адаптеров есть возможность назначить ViewBinder (коллбэк заполнения содержимого строк) - используем его:
String[] lines = new String[] {"title", "status", "_id"};
cursor = mDB.query("requests", lines, "id_ins = ?", new String[] {String.valueOf(user)}, null, null, null);
// добавляем в массив "to" id вью, в которую будем выводить номер строки
// не забываем, что массив "from" должен быть не меньшей длины и содержать валидные имена колонок
cursorAdapter = new SimpleCursorAdapter(getContext(), R.layout.cursor_listview, cursor, lines,
new int[]{R.id.title, R.id.status, R.id.rowNum}, 0);
cursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
// если id совпадает с нужным, приводим к нужному типу и вставляем значение
if (view.getId() == R.id.rowNum) {
TextView tv = (TextView) view;
// getPosition() возвращает индекс текущей строки
// (нумерация с 0) если нужно с 1, то прибавляем единицу
tv.setText(String.valueOf(cursor.getPosition() + 1));
// возвращая true, говорим адаптеру, что мы сами вставили значение
return true;
}
// иначе говорим адаптеру использовать его стандартную логику заполнения значения
// если не хотим заполнять остальные вью сами
return false;
}
});
list.setAdapter(cursorAdapter);
Автор решения: Pempium4
→ Ссылка
Переопределил в SimpleCursorAdapter метод bindView, теперь всё работает как мне нужно.
public class CustomCursorAdapter extends SimpleCursorAdapter {
public CustomCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
super.bindView(view, context, cursor);
LinearLayout layout = (LinearLayout) view;
TextView textView = (TextView) layout.findViewById(R.id.item);
textView.setText(String.valueOf(cursor.getPosition()+1) + ". ");
}
}