#android #listview #cursor #simplecursoradapter
#Android #просмотр списка #курсор #simplecursoradapter
Вопрос:
У меня есть ListView, который показывает 3 значения из базы данных SQLite (столбцы 1, 2 и 3). Справа от этих значений я хочу поместить несколько кнопок изображения. Мой вопрос — как мне изменить то, что отображается в столбцах 4 и выше?
Я переопределил setViewValue(), но это вызывается только для столбцов в курсоре (вроде того, что я ожидал). Как я могу изменить то, что отображается в определенной строке для столбцов 4 и выше? Могу ли я как-то переопределить метод getView()? Если я использую SimpleCursorAdapter — означает ли это, что я должен создать подкласс SimpleCursorAdapter, а затем переопределить метод getView()?
Комментарии:
1. вам необходимо реализовать интерфейс ViewBinder, нет необходимости каким-либо образом расширять SCA
2. @pskink: ViewBinder, насколько я могу судить, имеет только метод setViewValue(), и, похоже, он не позволяет изменять значения, которых нет в курсоре.
3. @pskink: Единственная идея, о которой я могу думать, — это получить доступ к родительскому представлению всякий раз, когда вызывается setViewValue(), а затем найти представления для столбцов 4 и выше.
4. посмотрите на первый параметр представления setViewValue, это представление, в которое вам нужно сопоставить свои данные
Ответ №1:
Вот как я это сделал:
public class CustomViewBinder implements ViewBinder
{
@Override
public boolean setViewValue( View view, Cursor cursor, int columnIndex )
{
if( columnIndex == 1 )
{
View vParent = (View) view.getParent();
ImageView ivPlaylist = (ImageView) vParent.findViewById( R.id.ibAddPlaylist );
if( ivPlaylist != null )
{
ivPlaylist.setImageResource( R.drawable.clipboard30x30purple );
}
Комментарии:
1. почему view.getParent()?, Параметр «view» — это вид, который вы ищете
2. @pskink: Пример, который я использовал с ViewBinder, показывал список элементов со звездочкой рядом с ними. Парень установил представление. Состояние в представлении, на которое вы ссылаетесь, исчезло, и исчезла только звездочка ImageView, а не вся строка. Если я использую view вместо vParent, он выходит из строя.
3. если ваш курсор имеет столбец _id плюс три дополнительных столбца: c0, c1 и c2, и при создании SCA вы используете from = [«c0», «c1″,»c2»], а ваш latout имеет три TextViews с идентификаторами: tv0, tv1, tv2 и to = [tv0, tv1, tv2], то setViewValue будет вызываться три раза для каждой строки, каждый раз с другим TextView и другим ColumnIndex
4. @pskink: Правильно, но я хочу получить доступ к ImageViews iv3, iv4 и iv5, для которых в курсоре нет индекса столбца. Это произвольные просмотры изображений, которые напрямую не связаны с тем, что находится в курсоре. Мое решение работает нормально — я не хочу получать доступ к tv0, tv1 и tv2 — я хочу получить доступ к столбцам ListView за пределами диапазона to = [].
5. просто добавьте идентификаторы в массив «to» и добавьте поддельные столбцы, такие как _id, в массив «from», или, если вы считаете, что ViewBinder слишком сложен для переопределения BindView, обязательно вызовите super