2016-03-25 8 views
0

Ich versuche, ein Listenelement in OnItemClick Methode zu löschen. DB wird für diesen Zweck aufgerufen und der Artikel wird gelöscht. Aber danach wird meine Listenansicht nicht aktualisiert, außer und bis ich diese Aktivität erneut aufgerufen habe. Außerdem funktioniert adapter.notifyDataSetChanged nicht. Hilfe bitte. Ich habe Stunden damit verbracht, verschiedene Lösungen auszuprobieren, aber keine funktioniert. Danke!Adapter.notifyDataSetChanged() nicht die Listenansicht aktualisieren

package com.fyp.digitalsecretary; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Fragment; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 

import java.util.ArrayList; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AbsListView; 
//import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.EditText; 
import android.widget.TimePicker; 
import android.widget.Toast; 
//import android.widget.Button; 
//import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.AdapterView.OnItemClickListener; 


public class UpcomingReminderList extends Main implements OnItemClickListener { 
    private ListView     upcomingReminderListView; 
    private ArrayList<ReminderItem>  tasksArrayList ; 
    private DynamicListAdapter   upcomingReminderListAdapter; 
    private ReminderItem    tempReminder; 
    public static android.app.ActionBar actionBar ; 
    private Context      c; 

    @SuppressLint("NewApi") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView (R.layout.upcomming_tasks);  
     Main.actionBar.setTitle("Upcoming Tasks");    
     tasksArrayList = DBHandler.getInstance(this).getBothReminders(); 

     upcomingReminderListAdapter = new DynamicListAdapter(getApplicationContext(),tasksArrayList); 
     upcomingReminderListView = (ListView) findViewById(R.id.lvTasks); 

     upcomingReminderListView.setAdapter(upcomingReminderListAdapter); 
     upcomingReminderListView.setOnItemClickListener(this); 
     upcomingReminderListAdapter.notifyDataSetChanged(); 

    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 

     tempReminder = tasksArrayList.get(position); 
     AlertDialog.Builder list = new AlertDialog.Builder(this); 

     final String[] dept = {"Edit", "Delete"}; 
     list.setItems(dept, new DialogInterface.OnClickListener() { 
     @Override 
      public void onClick(DialogInterface dialog, int which) { 

       if(which == 0){ 
        editReminder(); 
       } 
       else { 
        DBHandler.getInstance(c).deleteReminder (tempReminder); 
        tasksArrayList.clear(); 
        tasksArrayList = DBHandler.getInstance(c).getBothReminders(); 
        upcomingReminderListAdapter.notifyDataSetChanged(); 
       } 

      } 
     }); 
     list.setTitle("Please Select"); 
     list.create(); 
     list.show();   
    } 

    public void editReminder(){ 
     if (tempReminder.isLoc == 1) { 
      Intent edit = new Intent(this, LocBasedReminder.class); 
      edit.putExtra ("editReminder" , tempReminder);     
      this.startActivity(edit); 
     } 
     else { 
      Intent edit = new Intent(this, TimeBasedReminder.class); 
      edit.putExtra ("editReminder" , tempReminder);     
      this.startActivity(edit); 
     } 
    } 
} 
+1

Ändern Sie Ihre 'tasksArrayList = DBHandler.getInstance (c) .getBothReminders();' 'von tasksArrayList.addAll (DBHandler.getInstance (c). getBothReminders()); ' –

+0

verwenden Sie diese Zeile vor dieser Zeile DBHandler.getInstance (c) .deleteReminder (tempReminder); ancientReminderListAdapter.remove (tempReminder); –

+0

Danke eine Tonne @Raphael :) es hat funktioniert :) – Naila

Antwort

1

ändern

tasksArrayList = DBHandler.getInstance(c).getBothReminders(); 

von

tasksArrayList.addAll(DBHandler.getInstance(c).getBothReminders()); 
2

Sie aktualisieren Ihre tasksArrayList aber Ihre sind vorbei nicht Ihre tasksArrayList zu Ihrem Adapter aktualisiert. Ihr Adapter hat alte tasksArrayList mit alten Werten drin. deshalb ist Ihre Ansicht nicht ist erfrischend auch nach notifyDataSetChanged()

0

Sie können Verfahren in Ihrem Adapter erstellen, die mit Elementen aufgefrischt Liste und dann setzen notifyDataSetChanges():

Zum Beispiel in Ihrem Adapter diese Methode hinzufügen:

public void notifyMyAdapter(ArrayList<ReminderItem> itemsList) { 
     this.theListInYourAdapter = itemsList; 
     notifyDataSetChanged(); 
    } 

In Ihrer Tätigkeit rufen Sie einfach upcomingReminderListAdapter.notifiMyAdapter(tasksArrayList); insead upcomingReminderListAdapter.notifyDataSetChanged();

... 
        if(which == 0){ 
         editReminder(); 
        } 
        else { 
         DBHandler.getInstance(c).deleteReminder (tempReminder); 
         tasksArrayList.clear(); 
         tasksArrayList = DBHandler.getInstance(c).getBothReminders(); 
         upcomingReminderListAdapter.notifiMyAdapter(tasksArrayList); 
        } 
... 

Hoffnung es hilft!

Verwandte Themen