2017-06-07 4 views
0

Ich arbeite an einer Anwendung für Studenten. In dieser Anwendung habe ich eine Listenansicht, die mit SQLite gespeicherte Schüleraufgabe enthält. Ich habe 2 Menüschaltflächen auf der Aktionsleiste platziert, eine zum Zurückgehen und eine zum Löschen der Aufgabe aus der Liste. Wenn ich auf die Zurück-Schaltfläche klicke, funktioniert es gut, aber wenn ich versuche, die Aufgabe aus der Listenansicht zu löschen, fragt es zuerst, ob der Benutzer die Aufgabe löschen möchte oder nicht, AlertDialog.Builder dann erfolgreich Toast der Nachricht, aber nicht die Aufgabe aus löschen Liste.Task aus ListView löschen ActionBar-Menü verwenden Button Android

Mein Code für die Menüschaltfläche der Aktionsleiste wird unten angegeben. Bitte helfen Sie mir, meinen Code zu korrigieren. Ich würde es wirklich schätzen.

Vielen Dank im Voraus!

switch (item.getItemId()) { 
      case R.id.action_back: 
       Intent openMainActivity = new Intent(this, MainActivity.class); 
       startActivity(openMainActivity); 
       return true; 

      case R.id.action_discard: 
       AlertDialog.Builder builder = new AlertDialog.Builder(Second.this); 
       builder 
         .setTitle(getString(R.string.delete_title)) 
         .setMessage(getString(R.string.delete_message)) 
         .setIcon(android.R.drawable.ic_dialog_alert) 
         .setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           int id = getIntent().getExtras().getInt(getString(R.string.rodID)); 
           db.delete(DbHelper.TABLE_NAME, DbHelper.ID + "=" + id, null); 
           Toast.makeText(Second.this,"Task deleted",Toast.LENGTH_SHORT).show(); 
           db.close(); 
           Intent openMainActivity = new Intent(Second.this, MainActivity.class); 
           startActivity(openMainActivity); 
          } 
         }) 
         .setNegativeButton(getString(R.string.no), null) 
         .show(); 
         return true; 

      default: 
       return super.onOptionsItemSelected(item); 
     } 
+0

Was ist der Fehler, den Sie erhalten, fügen Sie weitere Details des Problems hinzu. – Adithya

+0

Ich denke, Ihre ID stimmt nicht mit der Datenbank-ID überein. Drucken Sie Ihre Zeilen-ID und prüfen Sie, ob sie korrekt ist. – MKY

+0

@Adithya Ich bekomme keinen Fehler, die Anwendung funktioniert gut. Das einzige Problem, das auftritt, ist, dass, nachdem ich versuche, eine Aufgabe aus der Listenansicht zu löschen, sie nicht löscht. Toast-Nachricht erscheint, dass diese Aufgabe gelöscht wird, die Aufgabe jedoch weiterhin in der Listenansicht verbleibt. – SoonProgrammerToBe

Antwort

0

Ich denke, Ihre ID stimmt nicht mit der Datenbank-ID überein. Drucken Sie Ihre Zeilen-ID und prüfen Sie, ob sie korrekt ist.

oder

Nachdem die Daten aus der Datenbank zu löschen müssen Sie sich erneut abfragen und den Adapter benachrichtigen, dass Daten in der Nähe wurden geändert sonst die App und öffnen Sie den Effekt zu sehen.

0

Bitte fügen Sie diese Funktion in DbHelper Klasse

public void deleteRow(String value) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.execSQL("DELETE FROM " + TABLE_NAME + " WHERE " + ID + "='" + value + "'"); 
    db.close(); 
} 

Und in Onclick Methodenaufruf diese Funktion

.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          int id = getIntent().getExtras().getInt(getString(R.string.rodID)); 
          dbHelper.deleteRow(id); 
          Toast.makeText(Second.this,"Task deleted",Toast.LENGTH_SHORT).show(); 
          db.close(); 
          Intent openMainActivity = new Intent(Second.this, MainActivity.class); 
          startActivity(openMainActivity); 
         } 
        }) 

// nur durch

ersetzt
db.delete(DbHelper.TABLE_NAME, DbHelper.ID + "=" + id, null); 

zu

dbHelper.deleteRow(id); 
Verwandte Themen