Guardar el estado de la casilla de verificación en una vista de lista personalizada con casillas de verificación

Tengo una vista de lista con casillas de verificación y deseo que cuando el usuario seleccione una casilla de verificación y cierre la aplicación, y vuelva a abrir la aplicación, se deberían seleccionar las mismas casillas de verificación. es decir, tengo que guardar el estado de las casillas de verificación de los elementos de la vista de lista utilizando el método sharedpref. Aquí he implementado lo mismo, pero no obteniendo el resultado deseado, he intentado mucho, por favor, ayúdame.

MyCustomAdapter.java

public class MyCustomBaseAdapter extends BaseAdapter implements OnCheckedChangeListener {
    private static ArrayList<SearchResults> searchArrayList;
    ViewHolder holder;
    private LayoutInflater mInflater;
    Editor editor;
    Context context;

    public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
        searchArrayList = results;
        mInflater = LayoutInflater.from(context);
    }

    public int getCount() {
        return searchArrayList.size();

    }

    public Object getItem(int position) {
        return searchArrayList.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) 
    {
        SharedPreferences sharedPrefs = context.getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE);


        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.custom_row_view, null);
            holder = new ViewHolder();
            holder.txtName = (TextView) convertView.findViewById(R.id.name);
            holder.cB = (CheckBox)convertView.findViewById(R.id.cb_category);

            convertView.setTag(holder);
        } 
        else {
            holder = (ViewHolder) convertView.getTag();
        }


        editor = sharedPrefs.edit();

        holder.txtName.setText(searchArrayList.get(position).getName());

        holder.cB.setChecked(sharedPrefs.getBoolean("CheckValue", false));

        return convertView;
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // TODO Auto-generated method stub


        if(holder.cB.isChecked()){

            editor.putBoolean("CheckValue", holder.cB.isChecked());
            editor.commit();
        }
    }


    static class ViewHolder {
        TextView txtName;
        CheckBox cB;
    }

}

CutomListviewActivity.java

public class CustomListViewActivity extends Activity {



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        ArrayList<SearchResults> searchResults = GetSearchResults();

        final ListView lv1 = (ListView) findViewById(R.id.ListView01);
        lv1.setAdapter(new MyCustomBaseAdapter(this, searchResults));

        lv1.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> a, View view, int position, long id) { 
                Object o = lv1.getItemAtPosition(position);
                SearchResults fullObject = (SearchResults)o;
                String s=fullObject.getName().toString();
                Toast.makeText(CustomListViewActivity.this, "You have chosen: " + " " + s, Toast.LENGTH_LONG).show();
                Toast.makeText(CustomListViewActivity.this, s, Toast.LENGTH_LONG).show();

            }  
        });


    }



    private ArrayList<SearchResults> GetSearchResults()
    {
        ArrayList<SearchResults> results = new ArrayList<SearchResults>();

        SearchResults sr1 = new SearchResults();
        sr1.setName("John Smith");

        results.add(sr1);

        sr1 = new SearchResults();
        sr1.setName("Jane Doe");

        results.add(sr1);

        sr1 = new SearchResults();
        sr1.setName("Steve Young");

        results.add(sr1);

        sr1 = new SearchResults();
        sr1.setName("Fred Jones");

        results.add(sr1);



        return results;
    }
}

Clase GetterSetter

package com.list;

public class SearchResults {
     private String name = "";


     public void setName(String name) {
      this.name = name;
     }

     public String getName() {
      return name;
     }


    }

row_layout.xml

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  <TextView 
  android:id="@+id/name"
  android:textSize="14sp" 
  android:textStyle="bold" 
  android:textColor="#FFFFFF" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"
  android:text="TextView"/>


  <CheckBox 
      android:id="@+id/cb_category"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:layout_marginLeft="25dp"/>

</LinearLayout>

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical|center_horizontal"
        android:text="Custom ListView Contents" />

    <ListView
        android:id="@+id/ListView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

Gracias por adelantado

Respuestas a la pregunta(1)

Su respuesta a la pregunta