Android speichern Kontrollkästchen Status in der ListView mit den Cursor-Adapter
Ich kann nicht finden, eine Möglichkeit zum speichern den Zustand einer checkbox bei der Verwendung einer Cursor-adapter. Alles andere funktioniert einwandfrei, aber wenn ich auf eine checkbox-es ist zu wiederholen, wenn es recycelt wird. Ive gesehen, Beispiele für die Verwendung von array-Adapter, aber wegen meiner mangelnden Erfahrung im finden es schwer, um es zu übersetzen in über cursor-adapter. Könnte mir jemand ein Beispiel, wie gehen über it. Jede Hilfe zu schätzen.
private class PostImageAdapter extends CursorAdapter {
private static final int s = 0;
private int layout;
Bitmap bm=null;
private String PostNumber;
TourDbAdapter mDbHelper;
public PostImageAdapter (Context context, int layout, Cursor c, String[] from, int[] to, String Postid) {
super(context, c);
this.layout = layout;
PostNumber = Postid;
mDbHelper = new TourDbAdapter(context);
mDbHelper.open();
}
@Override
public View newView(Context context, final Cursor c, ViewGroup parent) {
ViewHolder holder;
LayoutInflater inflater=getLayoutInflater();
View row=inflater.inflate(R.layout.image_post_row, null);
holder = new ViewHolder();
holder.Description = (TextView) row.findViewById(R.id.item_desc);
holder.cb = (CheckBox) row.findViewById(R.id.item_checkbox);
holder.DateTaken = (TextView) row.findViewById(R.id.item_date_taken);
holder.Photo = (ImageView) row.findViewById(R.id.item_thumb);
row.setTag(holder);
int DateCol = c.getColumnIndex(TourDbAdapter.KEY_DATE);
String Date = c.getString(DateCol);
int DescCol = c.getColumnIndex(TourDbAdapter.KEY_CAPTION);
String Description = c.getString(DescCol);
int FileNameCol = c.getColumnIndex(TourDbAdapter.KEY_FILENAME);
final String FileName = c.getString(FileNameCol);
int PostRowCol = c.getColumnIndex(TourDbAdapter.KEY_Post_ID);
String RowID = c.getString(PostRowCol);
String Path = "sdcard/Tourabout/Thumbs/" + FileName + ".jpg";
Bitmap bm = BitmapFactory.decodeFile(Path, null);
holder.Photo.setImageBitmap(bm);
holder.DateTaken.setText(Date);
holder.Description.setText(Description);
holder.cb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CheckBox cBox = (CheckBox) v;
if (cBox.isChecked()) {
mDbHelper.UpdatePostImage(FileName, PostNumber);
}
else if (!cBox.isChecked()) {
mDbHelper.UpdatePostImage(FileName, "");
}
}
});
return row;
};
@Override
public void bindView(View row, Context context, final Cursor c) {
ViewHolder holder;
holder = (ViewHolder) row.getTag();
int DateCol = c.getColumnIndex(TourDbAdapter.KEY_DATE);
String Date = c.getString(DateCol);
int DescCol = c.getColumnIndex(TourDbAdapter.KEY_CAPTION);
String Description = c.getString(DescCol);
int FileNameCol = c.getColumnIndex(TourDbAdapter.KEY_FILENAME);
final String FileName = c.getString(FileNameCol);
int PostRowCol = c.getColumnIndex(TourDbAdapter.KEY_Post_ID);
String RowID = c.getString(PostRowCol);
String Path = "sdcard/Tourabout/Thumbs/" + FileName + ".jpg";
Bitmap bm = BitmapFactory.decodeFile(Path, null);
File x = null;
holder.Photo.setImageBitmap(bm);
holder.DateTaken.setText(Date);
holder.Description.setText(Description);
holder.cb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CheckBox cBox = (CheckBox) v;
if (cBox.isChecked()) {
mDbHelper.UpdatePostImage(FileName, PostNumber);
}
else if (!cBox.isChecked()) {
mDbHelper.UpdatePostImage(FileName, "");
}
}
});
}
}
static class ViewHolder{
TextView Description;
ImageView Photo;
CheckBox cb;
TextView DateTaken;
}
}
InformationsquelleAutor Ricardo | 2010-03-09
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde Ihnen empfehlen die Verwendung von Android ' s built-in support für multiple-choice-Listen (
CHOICE_MODE_MULTIPLE
).Den
List11.java
SDK-Beispiel veranschaulicht dies. Sie können auch finden, ein Projekt aus einem meiner tutorials, in dem es verwendet hier.Können Sie immer noch verwenden Sie diese Technik mit Ihrem eigenen layout, so lange wie Sie einen
CheckedTextView
mitandroid:id="@android:id/text1"
wie gezeigt, in derandroid.R.layout.simple_list_item_multiple_choice
Ressource, von der eine Kopie zum Lieferumfang Ihres SDK.Finden Sie auch unter diese Frage und diese Frage und diese Frage und diese Frage.
CheckedTextView
unterstütztandroid:drawableLeft
und Angehörigen, die Sie nutzen könnten. Zweite, AFAIK, solange es die richtigeandroid:id
(siehe oben), kann es in einigen anderen layout (z.B. einLinearLayout
auch mit einemImageView
).setCompoundDrawables()
oder eine der Varianten vonsetCompoundDrawablesWithIntrinsicBounds()
Ich hatte das gleiche Problem mich: wie, um umzuschalten, wählen Sie mehrere CheckedTextView in einem benutzerdefinierten layout (ich.e nicht mit android.R.layout.simple_list_item_multiple_choice)
Folgende für mich gearbeitet. Das Beispiel, das ich habe, ist eine benutzerdefinierte Ansicht, die vorgesehen ist, einen Adapter erweitert, von SimpleCursorAdapter.
Meine benutzerdefinierte Ansicht (row_contact.xml):
Den Adapter erstellt wird, in der ListActivity.OnCreate, die fordert, setupViews():
Den Benutzerdefinierten Adapter:
Das entscheidende Stück code für mich war der check-Boxen arbeiten war:
Hoffe das hilft dir oder sonst jemand, der stolpert auf diese Frage.
Außerdem, entschuldigen Sie meine Java-noobness... ich habe erst angefangen Java vor ein paar Wochen.
Erklären Sie das Kontrollkästchen getView-Methode, und verwenden Sie diesen code
Danach auf die Haupttätigkeit, die u haben, um zu überprüfen, welche position der checkbox ist true
Öffnen "res/layout/main.xml" Datei hinzufügen " 3 "CheckBox" und ein button innerhalb des LinearLayout.
Datei : res/layout/main.xml