Das speichern des Zustands der checkbox-Komponente in eine benutzerdefinierte Ansicht der Liste mit Checkboxen

Habe ich eine Liste anzeigen mit Checkboxen und ich möchte, dass wenn der Benutzer wählt alle Kontrollkästchen und die Anwendung schließt und wieder öffnet sich die Anwendung, die gleichen Kontrollkästchen ausgewählt werden. ich.e ich den Status der Checkboxen des listview-Elemente, die mit der sharedpref Methode.
Hier habe ich implementiert die gleiche, aber nicht immer das gewünschte Ergebnis, ich habe viel probiert bitte helft mir.

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;
    }
}

GetterSetter Klasse

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>

Vielen Dank im Voraus

  • Sie können speichern einige Daten über geprüft Checkboxen in DB oder sharedPreferences. Und setzen Sie den status innerhalb der Methode getView.
InformationsquelleAutor Gaurav Arora | 2012-09-27
Schreibe einen Kommentar