2016-08-09 26 views
0

empfangen wurde Ich brauche etwas Hilfe. Ich habe Aktivitäten, bei denen ich Gegenstände erstelle. Als nächstes möchte ich es an das Fragment in der zweiten Aktivität senden, also muss ich es zuerst an diese Aktivität senden (bin ich richtig?). Dies ist, wie ich Artikel erstellen:Element aus Aktivität löschen, nachdem es in Fragment/Lifecycle-Ausgabe

public void savePart() { 
     Part part = new Part(name,quantity,"","",tag,"","2"); 
     Intent intent = new Intent(this,InvActivity.class); 
     intent.putExtra("Part", (Serializable) part); 
     setResult(2,intent); 
     finish(); 
    } 

Dies ist, wie ich es in der zweiten Tätigkeit erhalten:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == 2) { 
     part = (Part) data.getSerializableExtra("Part"); 
    } 
} 

I Verfahren haben das Teil in Fragmente zurückzukehren:

public Part getMyData() { 
     return part; 
    } 

In Fragment onResume() erhalte ich das Part-Objekt, überprüfe, ob ein Objekt mit ähnlichem Code existiert und füge es zur ListView hinzu, wenn nicht:

@Override 
    public void onResume() { 

    super.onResume(); 
    List<Part>subList = new ArrayList<>(); 
    if (mActivity.getMyData() != null) { 
     Part part = mActivity.getMyData(); 
     for(Part parts : mParts) { 
      if (parts.getCode().contains(part.getCode())) { 
       subList.add(parts); 
      } 
     } 
     if (subList.size() == 0) { 
      mParts.add(part); 
      adapter = new PartAdapter(getContext(), R.layout.part_item, mParts, mActivity, new AdapterCallback() { 
       @Override 
       public void onMethodCallback() { 

       } 
      }); 
      mPartsLV.setAdapter(adapter); 
     } else { 
      Toast.makeText(getContext(), R.string.equipment_exists, Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 

Bis jetzt funktioniert alles gut. Elemente werden korrekt hinzugefügt und in ListVIEW im Fragment angezeigt. Hier beginnt das Problem :) In der listView-Zeile habe ich imageView, die ein Element aus ListView löscht.

mDelete.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        mParts.remove(part); 
        notifyDataSetChanged(); 

      } 
     }); 

Das toll funktioniert, aber ... wenn Fragment zu onResume kommt zurück (gelöschtes Objekt) zeigt wieder Listview. Das liegt daran, dass ich jedes Mal Teil empfange und überprüfe, ob es in der Liste existiert. Ich denke, ich sollte die Absicht klären, nachdem ich Part from Activity erhalten habe, wo Part erstellt wurde, aber ich weiß nicht wie? Vielleicht eine andere Lösung, bitte?

Antwort

1

Deklarieren Sie Ihre subList als öffentlich und füllen Sie sie einmal. Sie müssen also Ihre onResume Funktion etwas ändern. Überprüfen Sie, ob die Liste bereits ausgefüllt ist. Wenn nicht, befüllen Sie die Liste von den Extras und umgekehrt.

+0

Sie meinen ich sollte boolean verwenden, um zu überprüfen, ob die Liste aktualisiert wurde? :) – Bartos

+0

Überprüfen Sie die Größe der Liste. Das wird gehen. Und bitte, als akzeptiert markieren, wenn das hilft :) –

+1

Danke! :) es hilft sehr – Bartos

1

ListsubList = neue ArrayList <>(); Ihre Liste wird jedes Mal erstellt, wenn onResume() aufgerufen wird, deshalb konnten Einträge zum Löschen nicht verwaltet werden. Also entweder eine Kopie dieser Liste oder jedes Mal prüfen, welche Elemente gelöscht wurden, und dann Daten auf Listenansicht setzen.