ListView mit einem Button

  • Antworten:9
Alex
  • Forum-Beiträge: 28

01.09.2016, 17:25:06 via Website

Hallo,
Ich stehe vor einem Problem mit meiner ListView!
In dieser ListView gibt es jeweils (pro Zeile) 4 TextViews, die Daten aus einer SQL ausgeben.
Nun möchte ich einen Button implementieren der auch in jeder Zeile sichtbar ist!
Dieser soll genau diese Zeile in der er gedrückt wird die Zeile löschen, d.h. brauche ich bei drücken des Buttons die ID der Zeile damit ich diese Entfernen kann! Nur wie bekomme ich die?

Um es vielleicht etwas verständlicher auszudrücken habe ich ein Bsp vom Android wecker!
Man kann hier einen Alarm erstellen. Wenn ich den Alarm nicht mehr brauche lösche ich ihn indem ich auf den Mülleimer, in der Zeile des Betreffenden Alarmes klicke und schwup weg ist er!

Danke schonmal für die Hilfe!
image

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.09.2016, 17:36:08 via Website

Hallo Alex,
da gibt es in Android mehrere philosophien, wie man sowas machen kann.
Eine davon hast du oben.
Eine adere wäre z.b. das reagieren auf einen langen click und dann ein Diealog mit der Abfrage, willst du wirklich löschen etc..
Oder nur ein item click und dann ein Popup Menü mit funktionen für diesesn Eintrag. Je nach belieben des Entwicklers ;)

Du hast dich jetzt für eine Entschieden:

Zuerstmal musst du dein List Item um den Button erweitern und diesen dann in einen Array/List Adapter mit aufnehmen.
Dann kannst du in der getView(..) für jede Zeile einen Button onClick listener setzen und eine Löschaktion vorprogrammieren, denn in der getView hast du die ListView Item Position und darüber kannst du auf die SQL ID schließen

LG Pascal //It's not a bug, it's a feature. :) ;)

Alex

Antworten
Alex
  • Forum-Beiträge: 28

02.09.2016, 00:34:14 via Website

Ok das ist schon alles was ich wissen muss :D Danke dir!

Antworten
Alex
  • Forum-Beiträge: 28

05.09.2016, 18:25:40 via Website

Ok doch nicht so einfach wie ich dachte... Ich kann in der getView(...) keinen OnClick Listener erstellen da ich weder den Button initialisieren kann, noch kann ich per XML die ButtonDelete(...) Methode aufrufen (grau hinterlegt)

Lg Alex

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.09.2016, 19:20:36 via Website

Hmm, es geht schon, wenn nicht, dann machst du was falsch.
Tipp: Hier mal mein kleiner Ansatz:

public View getView (int position, View convertView, ViewGroup parent){
    if( convertView == null ){
        //We must create a View:
        convertView = inflater.inflate(R.layout.my_list_item, parent, false);
    }
    Button btn = (Button)convertView.findViewById(R.id.myButton);
    btn.setOnClickListener(new OnClickListener(){
     public void onClick(View v)
{
//Dein Click Code
z.b.
myList.Remove(position); //Eintrag aus der Liste entfernen
//Danach evntl. Adapter per notify aktualisieren
}

//Anderer Code z.b. die TextViews mit Daten füllen etc...
         });
    return convertView;
}

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Alex
  • Forum-Beiträge: 28

05.09.2016, 19:33:01 via Website

Habs hinbekommen! Hab das convertView. vergessen ^^ sagmal andere Frage nummeriert eine SQL automatisch die IDs durch oder muss ich die auch mit ContentValues.put(...) setzen?

Antworten
Alex
  • Forum-Beiträge: 28

05.09.2016, 19:35:51 via Website

hat sich erledigt :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.09.2016, 19:44:36 via Website

Geht Automatisch wenn du eine AutoIncrement Identity Spalte definiert hast. Sonst nicht

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Alex
  • Forum-Beiträge: 28

07.09.2016, 10:56:19 via App

gut dann habe ich aber ein Problem... er löscht immer nur das 1. und zusätzlich geht das nur wenn ich es gerade created habe...

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.09.2016, 11:44:48 via Website

In der Datenbank oder meinst du die List view?
In beiden Fällen brauch ich Code um etwas sagen zu können.
Und beschreibe mal bitte genauer wie die App sich verhält/was das Problem ist

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten