Ich habe eine Listenansicht mit benutzerdefinierten Zeile mit einer Textansicht und einem anklickbaren Bild zum Löschen der Zeile. Listview ruft die Daten von der SQLite-Datenbank ab. Ich habe die Daten erfolgreich aus der Datenbank in die Listenansicht geladen. Ich möchte diese Zeile aus der Datenbank löschen, wenn die Schaltfläche Löschen gedrückt wird. Ich weiß, dass das Onclick-Event-Handler an die Lösch-Schaltfläche binden muss und das Objekt oder die SQLite-Daten mit der Zeile gebunden werden müssen. Wie kann ich die sqlite-Daten mit der Zeile verknüpfen, in der der Benutzer auf die Schaltfläche zum Löschen geklickt hat? Hier ist mein Adapter zur ListenansichtLöschen der ausgewählten Zeile in der Listenansicht in Android
public class CommentAdapter extends ArrayAdapter<Comment> {
// private objects
private List<Comment> mListComment;
private LayoutInflater mInflater;
public CommentAdapter(Context c,int textViewResourceId, List<Comment> list) {
super(c, textViewResourceId, list);
mListComment = list;
// create layout inflater
mInflater = LayoutInflater.from(c);
}
@Override
public int getCount() {
return mListComment.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// get view reference
View view = convertView;
// if null
if(view == null) {
// inflate new layout
view = mInflater.inflate(R.layout.comment_row, null);
// create a holder
ViewHolder holder = new ViewHolder();
// find controls
holder.txtComment = (TextView)view.findViewById(R.id.txtComment);
holder.btnDelete = (ImageView)view.findViewById(R.id.btnDelete);
// set data structure to view
view.setTag(holder);
}
Comment cmt = mListComment.get(position);
// if not null
if(cmt != null) {
// query data structure
ViewHolder holder = (ViewHolder)view.getTag();
// set data to display
holder.txtComment.setText(cmt.getComment());
holder.btnDelete.setClickable(true);
holder.btnDelete.setImageResource(android.R.drawable.ic_delete);
}
// return view
return view;
}
/*
* @class ViewHolder
* to hold data structure on view with comment info
*/
static class ViewHolder {
private TextView txtComment;
private ImageView btnDelete;
}
}
Hier meine CommentsDataSource Klasse ist
public class CommentsDataSource {
private SQLiteDatabase database;
private DatabaseHelper dbHelper;
private String[] allColumns = { DatabaseHelper.COLUMN_ID, DatabaseHelper.COLUMN_COMMENT };
public CommentsDataSource(Context context) {
dbHelper = new DatabaseHelper(context);
}
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
public void close() {
dbHelper.close();
}
public Comment createComment(String comment) {
//insert into databasae
return newComment;
}
private Comment cursorToComment(Cursor cursor) {
//convert cursor to comment
return comment;
}
public void deleteComment(Comment comment) {
//delete row from datbase
}
public List<Comment> getAllComments() {
//get all rows
return comments;
}
}
Sie benötigen einen Cursor-Adapter, der an Ihre Datenbank bindet. Änderungen an Ihrer Datenbank spiegeln sich in Ihrem Cursor-Adapter wider. Löschen oder Einfügen in die Datenbank würde dann in Ihrer Liste widerspiegeln. – ComputerEngineer88