Ich habe eine ListView
. Ich füge eine einzelne Zeile in die SQLite-Datenbank ein, indem ich sie überprüfe. (CheckBox
) Gleichzeitig muss ich die Zeile löschen, die ich nicht markiert habe. Ich brauche die ID der Zeile, die in meiner Tabelle gespeichert ist, aufgrund derer ich die Zeile löschen kann. Wie kann ich es tun ? Dies ist meine CheckBox
ändernden Code in Adapter
.Wie kann ich eine bestimmte Zeile in Sqlite löschen?
public class MainVacancyAdapter extends ArrayAdapter {
private List<VacancyModel> vacancyModelList;
private int resource;
private LayoutInflater inflater;
ArrayList<Boolean> isSelected;
SQLHelper sqlHelper;
public MainVacancyAdapter(Context context, int resource, List<VacancyModel> objects) {
super(context, resource, objects);
vacancyModelList = objects;
this.resource = resource;
sqlHelper = new SQLHelper(getContext());
inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
isSelected = new ArrayList<>(vacancyModelList.size());
for (int i = 0; i < vacancyModelList.size(); i++) {
isSelected.add(false);
}
}
//Finding textViews and inserting data into them
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(resource, null);
holder.tvHeader = (TextView) convertView.findViewById(R.id.tvHeader);
holder.tvProfileName = (TextView) convertView.findViewById(R.id.tvProfileName);
holder.tvSalary = (TextView) convertView.findViewById(R.id.tvSalary);
holder.tvPostCr = (TextView) convertView.findViewById(R.id.tvPostCr);
//holder.tvBody = (TextView) convertView.findViewById(R.id.tvBody);
holder.cbxFav = (CheckBox) convertView.findViewById(R.id.cbxFav);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
holder.cbxFav.setOnCheckedChangeListener(null);
}
holder.tvHeader.setText(vacancyModelList.get(position).getHeader());
holder.tvProfileName.setText(vacancyModelList.get(position).getProfileName());
holder.tvSalary.setText(vacancyModelList.get(position).getSalary());
holder.tvPostCr.setText(vacancyModelList.get(position).getPostCreated());
//holder.tvBody.setText(vacancyModelList.get(position).getBody());
holder.cbxFav.setChecked(isSelected.get(position));
holder.cbxFav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
//inserting the data into Favourite Table in sql
isSelected.set(position, true);
sqlHelper.createFavouriteTable(vacancyModelList.get(position));
//Toast.makeText(getContext(), "Added to favourite", Toast.LENGTH_SHORT).show();
} else {
isSelected.set(position, false);
sqlHelper.deleteFromFavouriteDatabase(position);
//Toast.makeText(getContext(), "Deleted from favourite", Toast.LENGTH_SHORT).show();
}
}
});
return convertView;
}
static class ViewHolder {
TextView tvHeader;
TextView tvProfileName;
TextView tvSalary;
TextView tvPostCr;
TextView tvBody;
CheckBox cbxFav;
}
}
Methode in SQLHelper class
public void deleteFromFavouriteDatabase(int rowID) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(FAVOURITE.TABLE_NAME, FAVOURITE.KEY_ID + " = " + rowID, null);
db.close();
}
Show full Adapter Klassencode – Vickyexpert
Gibst du gesamtes VacancyModel Objekt für createFavouriteTable Methode? – Vickyexpert
@Vickyexpert ja – uniq