Android: Как установить проверенный элемент списка? - PullRequest
1 голос
/ 31 января 2011

У меня есть android.R.layout.simple_list_item_multiple_choice с флажками, которые нужно, поэтому инициируйте некоторые из них.Как я могу это сделать?У меня есть следующий код:

    private void fillList() {
    Cursor NotesCursor = mDbHelper.fetchAllNotes();
    startManagingCursor(NotesCursor);

    String[] from = new String[] { NotesDbAdapter.KEY_TITLE, NotesDbAdapter.KEY_BODY, NotesDbAdapter.KEY_CHECKED };

    int[] to = new int[] { 
    android.R.id.text1, 
    android.R.id.text2, 
    //How set checked or not checked?
     };

    SimpleCursorAdapter notes = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_multiple_choice, NotesCursor,
            from, to);
    setListAdapter(notes);

}

1 Ответ

2 голосов
/ 31 января 2011
  1. Поместите идентификатор ресурса вашего флажка в макете строки в массив to, соответствующий курсору NotesDbAdapter.KEY_CHECKED в массиве from.

  2. Реализация SimpleCursorAdapter.ViewBinder .

  3. У метода ViewBinder.setViewValue () есть проверка, когда он вызывается для столбца NotesDbAdapter.KEY_CHECKED.

  4. Если это , а не столбец KEY_CHECKED, верните его false, адаптер будет делать то, что он обычно делает.

  5. Когда это столбец KEY_CHECKED, установите для CheckBox view (требуется литье) установлен флажок или нет, а затем верните true, чтобы адаптер не пытался связать его сам. Курсор и соответствующий идентификатор столбца доступны для доступа к данным запроса, чтобы определить, стоит ли устанавливать флажок или нет.

  6. Установите ViewBinder в вашем SimpleCursorAdapter с помощью setViewBinder ()

Вот одна из моих реализаций ViewBinder. Это не для чекбоксов, а для того, чтобы сделать какое-то необычное форматирование текстового представления, но это должно дать вам некоторое представление о подходе:

private final SimpleCursorAdapter.ViewBinder mViewBinder =
    new SimpleCursorAdapter.ViewBinder() {
        @Override
        public boolean setViewValue(
                final View view,
                final Cursor cursor,
                final int columnIndex) {
            final int latitudeColumnIndex =
                cursor.getColumnIndexOrThrow(
                        LocationDbAdapter.KEY_LATITUDE);
            final int addressStreet1ColumnIndex =
                cursor.getColumnIndexOrThrow(
                        LocationDbAdapter.KEY_ADDRESS_STREET1);

            if (columnIndex == latitudeColumnIndex) {

                final String text = formatCoordinates(cursor);
                ((TextView) view).setText(text);
                return true;

            } else if (columnIndex == addressStreet1ColumnIndex) {

                final String text = formatAddress(cursor);
                ((TextView) view).setText(text);
                return true;

            }

            return false;
        }
    };
...