2016-07-19 21 views
0

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(); 
} 
+0

Show full Adapter Klassencode – Vickyexpert

+0

Gibst du gesamtes VacancyModel Objekt für createFavouriteTable Methode? – Vickyexpert

+0

@Vickyexpert ja – uniq

Antwort

0

Platz Säule von Id in VacancyModel und bindet es dann auf Löschen

int id = vacancyModelList.get(position).getId() 
sqlHelper.deleteFromFavouriteDatabase(id); 
+0

Das Problem war, dass es keine Wert-ID in der JSON-Datei gab. Nach dem Hinzufügen der ID in der JSON-Datei wurde Ihre Methode verwendet – uniq

0

versuchen, Ihre Anweisung delete Um dies zu ändern:

db.delete(FAVOURITE.TABLE_NAME, FAVOURITE.KEY_ID + "=?", new String[]{rowID});

0

Sie bitte Ihre getView ändern() -Methode von unten:

@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.cbxFav.setTag(vacancyModelList.get(position)); 



    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); 
     VacancyModel selectedModel = (VacancyModel) holder.cbxFav.getTag(); 


       sqlHelper.createFavouriteTable(selectedModel); 
       //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(); 

       VacancyModel selectedModel = (VacancyModel) holder.cbxFav.getTag(); 
        sqlHelper.deleteFromFavouriteDatabase(selectedModel.getId()); 

      } 
     } 
    }); 

    return convertView; 
} 
+0

sqlHelper.deleteFromFavouriteDatabase (selectedModel.getId()); "getId" ist nicht verfügbar – uniq

+0

setzen Sie dort Ihre ID Feld Mann ich habe getId, müssen Sie Ihre eindeutige ID – Vickyexpert

Verwandte Themen