ListViewItem wird nicht an der angegebenen Position gelöscht

N

Nexxee

Neues Mitglied
0
Hallo liebe Community,
ich habe folgendes Problem...

(Ich bin neu im Android Programmieren -> Komme aus der C# ecke)

Ich habe eine ListView die mir auflistet welche .mp3 oder .ac3 Dateien ich in meinem Ordner habe.
Ich einen CustomListViewAdapter.

Nun habe ich einen LongItemClickEvent registriert und Aboniert. Das funktioniert auch alles ohne Probeleme.
Wenn ich nun im ContextMenu allerdings Löschen auswähle, wird die Datei vom Internen Speicher auch gelöscht nur von der Listview wird mal 1 Item entfernt (das falsche ) oder es passiert so rein garnichts...

hier mal der Code

Properties

import java.io.File;

/**
* Created by nexus on 25.01.2016.
*/
public class FileActionProperties {
private File _file;
private String _fileName;
private String _path;
private String _fullMeadiaPath;
private int _position;

public void setFile(File file){
if (this._file != file)
this._file = file;
}

public File getFile(){
return this._file;
}

public void setFileName(String fileName){
if (this._fileName != fileName)
this._fileName = fileName;
}

public String getFileName(){
return this._fileName;
}

public void setPath(String path){
if (this._path != path)
this._path = path;
}

public String getPath(){
return this._path;
}

public void setFullMeadiaPath(String fullMeadiaPath){
if (this._fullMeadiaPath != fullMeadiaPath)
this._fullMeadiaPath = fullMeadiaPath;
}

public String getFullMeadiaPath(){
return this._fullMeadiaPath;
}

public void setPosition(int position){
if (this._position != position)
this._position = position;
}

public int getPosition(){
return this._position;
}
}


private void setListViewDownloadContentEvents() {
if (list.get(0) != "Keine Downloads"){

listView.setOnItemClickListener(new OnItemClickListener() {
@override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
fap.setFile(new File(path + adapter.getItem(position)));
PlayFileIntent();
}
});

listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
fap.setFile(new File(path + adapter.getItem(position)));
fap.setFullMeadiaPath(path + adapter.getItem(position));
fap.setPosition(position);
fap.setFileName(adapter.getItem(position));

customDialog.show();
return true;
}
});

adapter.setOnClickListenerClass(AdapterClickView);
}

}

private void MessageBox(){
builder = new AlertDialog.Builder(this);

builder.setTitle("Löschen");
builder.setMessage("Sind Sie sicher ?");

builder.setPositiveButton("Ja", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
// Do nothing but close the dialog
File del = fap.getFile();

if (del.delete()) {

sendBrodcasetToDel();
adapter.remove(fap.getFileName());
adapter.notifyDataSetChanged();
Toast.makeText(getApplicationContext(), "Datei erfolgreich gelöscht", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Datei konnte nicht gelöscht werden " + MediaFile, Toast.LENGTH_SHORT).show();
}
dialog.dismiss();
}

});

builder.setNegativeButton("Nein", new DialogInterface.OnClickListener() {

@override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "NEIN", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
}

Den Debugger bin ich bereits durchgegangen.
Die Position des Items ist richtig. Der Dateiname auch....
Nach dem Debugger kann ich keinen fehler finden...

Kann mir da jemand helfen ?

Mit freundlichem Gruß


EDIT: Ich muss anmerken das, dass Abspielen sowie Share einwandfrei funktioniert. Auch das Löschen funktioniert. Nur der austrag aus der Listview nicht...
 
Gelöst.

Ich habe eine eine Methode remove mit dem Parameter int position erstellt. Dort lösche ich es aus dem array und füge das neue array einer liste zu. Dann gebe ich dem Adapter die Information das sich was geändert hat.

public void remove(int position) {
if (position >= 0 && list.length > position && list[position] != null) {
array.remove(position);
String[] l = new String[array.size()];
for (int i = 0; i < array.size(); i++){
l = array.get(i);
}
list = l;
notifyDataSetChanged();
}
}
 
Eine Objektvariable namens "fap"?! Really? ^^
 
Das sind die properties... Warum nicht ? Ich habs nur ausgelagert. :) fap = FileActionProperties

Es ist so wesentlich strukturierter wenn du dir mal die gesamte Klasse anschaust...

Lass mich ein wenig länger im Android Bereich schaffen, dann wird auch das besser :)

Ich bin aber für jeden Verbesserungsvorschlag offen.

Mit freundlichem Gruß
 
Aber nur, wenn Du der einzige bist, der den Code lesen muss. :) Ich würde die Felder auch anders benennen (_file, _fileName). Das ist kein C. Schau mal hier nach: Code Style for Contributors | Android Open Source Project

Noch ein Tip für Arrays. Vermeide sie, wenn es geht. Sie sind langsam, verbrauchen viel zu viel Speicher und laden zu Fehlern ein.
Schau Dir mal Listen an. Insbesondere die ArrayList: ArrayList (Java Platform SE 7 )

Ähnliches gilt für Getter und Setter. Unter Android sollte man sie vermeiden. Da hier keine Beans benutzt werden, braucht man sie nicht, und sie gehen auch auf die Performance und verbrauchen unnötigen Speicher.
 
  • Danke
Reaktionen: Nexxee
Danke dir (Daumen hoch) ich werde mir die listen anschauen und den style berücksichtigen.

Danke
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
10
Aufrufe
204
swa00
swa00
J
Antworten
5
Aufrufe
925
swa00
swa00
SaniMatthias
Antworten
19
Aufrufe
936
swa00
swa00
Zurück
Oben Unten