CheckBox в ListView сбрасывается, когда он покидает экран

Я следовал за учебникомВот создать кастомListView это показывает элементы с заголовками категорий. Я изменилlist_item_entry.xml положитьCheckBox в пункте:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:paddingRight="?android:attr/scrollbarSize" >

    <CheckBox
        android:id="@+id/option_checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="6dp"
        android:focusable="false"
        android:clickable="false" />

    <TextView
        android:id="@+id/list_item_entry_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:gravity="center_vertical"
        android:minHeight="?android:attr/listPreferredItemHeightSmall"
        android:ellipsize="marquee"
        android:fadingEdge="horizontal" />

</LinearLayout>

Моя проблема в том, что если я проверю некоторые изCheckBoxes затем прокрутите их с экрана, когда они возвращаются, они не проверены. тем не мениеlistView.getCheckedItemPositions() по-прежнему показывает, что элементchecked.

Я уверен, что моя проблема сgetView() метод в моем обычаеArrayAdapter:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final Item i = items.get(position);
    if (i != null) {
        if(i.isSection()){
            SectionItem si = (SectionItem)i;
            convertView = vi.inflate(R.layout.list_item_section, parent, false);

            convertView.setOnClickListener(null);
            convertView.setOnLongClickListener(null);
            convertView.setLongClickable(false);

            final TextView sectionView =
                     (TextView) convertView.findViewById(R.id.list_item_section_text);
            sectionView.setText(si.getTitle());
        }else{
            EntryItem ei = (EntryItem)i;
            convertView = vi.inflate(R.layout. list_item_entry, parent, false);
            final TextView title =
                     (TextView) convertView.findViewById(R.id.list_item_entry_title);
            if (title != null) 
                title.setText(ei.getTitle());
        }
    }
    return convertView;
 }

Я думаю, что у меня есть две проблемы здесь, хотя я не знаю, как их решить:

С помощьюvi.inflate каждый раз заставляет андроид постоянно создавать представления, что плохо (не уверен в этом). Я пытался только надуть его, еслиconvertView == null но иногдаconvertView будет в неправильном формате, т.е.List_item_section когда это должно бытьList_item_entry, Разве это нормально раздувать это каждый раз?

Я думаю, что раздувание зрения каждый раз вызываетCheckBoxes быть сброшенным, хотя я могу ошибаться по этому поводу.

Так как мне сделать так, чтобы CheckBoxes оставались проверенными при выходе и возвращались на экран? И будет ли этот метод заполнять память Android представлениями, если список достаточно длинный?

Обновить: Мне понравился ответ @ user3815165, потому что мне не нужно было хранитьchecked значение дляsectionItem который не имеет флажок. Но, как я уже упоминал в комментарии, так какitems список не в контексте действия, то значения каждогоEntryItem проверяется или не сохраняется, когда представление уничтожается и создает ошибки.

Поэтому я решил пойти с ответом @ Palash, несмотря на то, что он хранил ненужные данные (только одинboolean значение для каждогоSectionItem в списке). Работает отлично.

Ответы на вопрос(2)

Ваш ответ на вопрос