2016-05-17 15 views
-1

Ich weiß, dass es ähnliche Fragen zu diesem Thema gibt, aber keine von ihnen funktionierte für mich.Android aktualisieren ListView

Ich mache eine Wecker-App, die eine ListView zeigt alle Alarme, die in der Datenbank gespeichert sind. Wenn der Benutzer lange auf einen der Einträge ListView klickt, wird ein Dialogfeld angezeigt, in dem bestätigt wird, dass der ausgewählte Alarm wirklich gelöscht werden soll. Nach dem Klicken auf die Schaltfläche "Ja" wird der Alarm gelöscht.

Das Problem ist meine ListView nur aktualisiert, nachdem ich eine andere Aktivität starten und dann zurück zu dem, wo die ListView ist, würde ich gerne wissen, was ich tun muss, um es zu aktualisieren, sobald der Alarm gelöscht wird.

PS .: Ich habe schon versucht adapter.notifyDataSetChanged();

Hier ist mein Code:

UITools.adaptAlarmsListView(this, listView, R.layout.alarm_listview_item); 
listView.setOnItemLongClickListener(
      new AdapterView.OnItemLongClickListener() 
      { 
       @Override 
       public boolean onItemLongClick(AdapterView<?> adapterView, 
               View view, 
               final int position, long l) 
       { 
        final boolean[] deletedFlag = {false}; // Tells if the alarm has been deleted 
        UITools.showDialogue(HomeActivity.this, 
          getString(R.string.delete), 
          getString(R.string.delete_question), 
          R.drawable.bin, getString(R.string.no), 
          new DialogInterface.OnClickListener() 
          { 
           @Override 
           public void onClick(
             DialogInterface dialogInterface, int i) 
           { 
            // Do nothing 
           } 
          }, getString(R.string.yes), 
          new DialogInterface.OnClickListener() 
          { 
           @Override 
           public void onClick(
             DialogInterface dialogInterface, int i) 
           { 
            AlarmDAO.delete(getBaseContext(), 
              position + 1); 
            UITools.showToast(getBaseContext(), 
              getString(R.string.deleted), 
              Toast.LENGTH_SHORT); 
            deletedFlag[0] = true; 
           } 
          }); 
        if (deletedFlag[0]) 
        { 
         listView.setAdapter(null); 
         UITools.adaptAlarmsListView(HomeActivity.this, 
           listView, R.layout.alarm_listview_item); 
        } 
        return true; 
       } 
      } 
    ); 

UITools.adaptAlarmsListView:

/** 
* Adapts the alarms ListView 
* @param context - Context 
* @param listView - ListView 
* @param listViewItemId - int 
*/ 
public static void adaptAlarmsListView(Context context, ListView listView, 
           int listViewItemId) 
{ 
    Alarm[] alarms = AlarmDAO.getAlarms(context); 
    AlarmAdapter adapter = new AlarmAdapter(context, listViewItemId, alarms); 
    listView.setAdapter(adapter); 
} 
+1

Sie müssen Ihren Code schreiben. – jzarsuelo

+0

Führen Sie den Code, der ihn lädt, einfach erneut aus. – petey

+0

@jzarsuelo, notiert – AlanC92

Antwort

0
If your are using a fragment, just create an interface on that fragment 
and over the interface in the activity that hosts the fragment and 
replace the present fragment with itself. or 
create a method the re-initializes the listview, it adapter and the list. 
if this is not clear enough, paste your code so i can check where the problem is. 
+0

Nein, ich benutze kein Fragment, ich habe gerade meine Frage bearbeitet, jetzt mit dem Code – AlanC92

+0

in AlarmAdapter-Klasse, löschen Sie Ihre ArrayList in Constructor, bevor Sie neue Daten hinzufügen. Dann vor listView.setAdapter (adapter); adapter.notifyDataSetChanged(); – Franklyn

Verwandte Themen