2016-11-09 5 views
-1

in meinem Code beim Löschen Zeile der Listenansicht Listenansicht nicht ändern.Ich benutze adapter.notifyDataSetChange(), aber es ist nicht word.this ist mein Code: Code machen verschiedene Position der Klasse.notifyDataSetChanged funktioniert nicht in meiner Aktivität

CustomList adapter; 
Integer[] imageId; 
public String[] _Data2; 
public int positionAll; 
ArrayList<ArrayList<String>> _Data = new ArrayList<ArrayList<String>>(); 
DataBase data = new DataBase(Show_Code.this, "MELK_TBL"); 


try { 
     data.open(); 
     _Data = data.GetData(); 
     imageId = new Integer[_Data.size()]; 
     _Data2 = new String[_Data.size()]; 
     for (int i = 0; i < _Data.size(); i++) { 
      imageId[i] = R.drawable.municipal; 
      _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0"; 
     } 
     adapter = new CustomList(Show_Code.this, _Data2, imageId); 
     data.close(); 
    } catch (Exception e) { 
     Toast.makeText(getApplication(), e.toString(), Toast.LENGTH_LONG).show(); 
    } 

    list.setAdapter(adapter); 



list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

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

      try { 
       data.open(); 
       data.Delete(_Data.get(position).get(1), _Data.get(position).get(2), _Data.get(position).get(3), _Data.get(position).get(4), _Data.get(position).get(5), _Data.get(position).get(6), _Data.get(position).get(7)); 
       data.close(); 
       adapter.notifyDataSetChanged(); 
      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
      } 
      return true; 
     } 
    }); 

bitte helfen Sie mir, ich habe keine Zeit dafür :(

Antwort

0

Nach dem Löschen der Werte müssen Sie die neue Arraylist übergeben, in der Sie alle diese Werte entfernt haben, und dann die Adapterklasse benachrichtigen. sehen in Ihrem Fall den Code unten

list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

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

      try { 
       data.open(); 
       data.Delete(_Data.get(position).get(1)); 
       data.close(); 
       **//Edited code...** 
       _Data.get(position).remove(1); 
       adapter.refreshView(_Data); 
       **//Edited code...** 
      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
      } 
      return true; 
     } 
    }); 

Und in Adapterklasse refreshview Methode sein wird wie unten,

public void refreshView(String[] _Data) { 
    this._Data = _Data; 
    notifyDataSetChanged(); 
    } 

Auf diese Weise Sie die Daten mitteilen können. Zum Beispiel habe ich nur einen Wert gelöscht und benachrichtigen.

Hoffe, das ist hilfreich :)

+0

dieser Code nicht funktionieren. – amardco

+0

@amardco: Sie müssen den gelöschten Wert aus dem String-Array in der Aktivität .i.e. entfernen, in Ihrem Fall ist '_Data2' das String-Array. Sie müssen also die gelöschten Werte aus dem '_Data2' entfernen und den Wert des Adapter-String-Arrays durch das neue Array ersetzen und den Adapter benachrichtigen. Es wird funktionieren, das habe ich hier erklärt. In Ihrem Fall haben Sie den Wert in der Aktivität gelöscht, aber Sie haben diesen Wert nicht an den Adapter übergeben, deshalb funktioniert die Benachrichtigung nicht. – Jeevanandhan

+0

das ist Arbeit finally.thank – amardco

0

Sie benötigen Sie den Code neu zu organisieren, Methoden, nur für Select databe Sie immer tun, um die list.setAdapter(adapter); dann verwenden adapter.notifyDataSetChanged();

+0

es funktioniert nicht. Ich möchte, wenn eine Zeile löscht es funktioniert. – amardco

+0

Sicher, aber Sie müssen das Objekt aus Ihrer Datenbank neu laden, setzen Sie den Adapter mit den aktuellen Daten zurück, bevor Sie 'notifyDataSetChanged()' verwenden. –

2

Sie vorbei _Data2 Objekt in Adapter Sie gleiches Objekt aktualisiert von Daten nach dem Löschen Versuchen Sie dies in onItemLongClick(AdapterView<?> parent, View view,int position, long id) Verfahren vor data.close() Zugabe:..

_Data = data.GetData(); 
imageId = new Integer[_Data.size()]; 
_Data2.clear(); 
for (int i = 0; i < _Data.size(); i++) { 
    imageId[i] = R.drawable.municipal; 
    _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0"; 
} 

Erstellen Sie kein neues Objekt von _Data2. Löschen Sie einfach das gleiche Objekt und fügen Sie ganze Daten wieder hinzu und danach können Sie adapter.notifyDataSetChanged() aufrufen, dann wird dies automatisch aktualisiert.

+0

_Data2 löscht nicht function.it ist String-Array. – amardco

+1

wird die Größe von _Data2 gleich sein wie früher ?? Kein Recht? Sie sollten ArrayList dafür verwenden, damit es bei der Aktualisierung automatisch in Ihrem Adapter auf notifyDataSetChange aktualisiert wird. –

+0

i Code ändern, indem _Data2 als Arraylist festlegen und ändern, wie Sie Ihren Code, aber es funktioniert nicht wieder – amardco

3

Da die Größe des Array zur Laufzeit nicht geändert wird, so müssen u neuen Adapter erstellen und wieder zur Liste Sie diesen Code hinzufügen müssen in onItemLongClick

data.open(); 
     _Data = data.GetData(); 
     imageId = new Integer[_Data.size()]; 
     _Data2 = new String[_Data.size()]; 
     for (int i = 0; i < _Data.size(); i++) { 
      imageId[i] = R.drawable.municipal; 
      _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0"; 
     } 
     adapter = new CustomList(Show_Code.this, _Data2, imageId); 
     data.close(); 
     list.setAdapter(adapter) 
Verwandte Themen