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 Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code ist fast richtig. Nur brauchen, um einige änderungen...
Check My code von
setOnCheckedChangeListener
für checkbox.. ich hoffe, es wirdDeclare einen booleschen array der Aufzeichnung der aktivierten Zustand (in der
setOnCheckedChangeListener()
) für jede position, die Position, dann rufen SiesetChecked()
nachsetOnCheckedChangeListener()
. Nur, dass einfache.