German Problem mit Listview

Discussion in 'German Forum' started by jsk001, Jun 29, 2015.

  1. jsk001

    jsk001 Member Licensed User

    Ich verwende in einem funktionierenden Projekt ein Listview um den
    Inhalt einer Textdatei mit etwa 200 Fahrzeugen (Bezeichnung des Fahrzeuges und Rufnummer)
    anzuzeigen (TwoLinesLayout) und bei Auswahl bestimmte Aktionen auszuführen.
    ich möchte jetzt von einer anderen Activity aus bestimmte Fahrzeuge editieren, Löschen
    oder ein neues Fahrzeug zum Listview hinzufügen.
    Leider bekomme ich das einfach nicht gebacken. Wenn ich mit folgendem Code versuche ein Fahrzeug hinzuzufügen, wird weder der Eintrag angezeigt, noch wird der Sprung zum letzten Fahrzeug ausgeführt.
    Ich hoffe, daß mir hier jemand einen Tip geben kann.
    Ich möchte das Ganze gern mit einem Listview auf die Reihe kriegen, da das Programm ziemlich komplex ist und ich nicht das ganze Projekt "umstricken" möchte.

    Hier der Auschnitt aus dem Code in der zweiten Activity (EditCars):

    Main.PhoneList.AddTwoLines(CarName.Text,CarNumber.Text) 'zu vorhandenen Entries hinzufügen
    SaveCar.SetBackgroundImage(LoadBitmap(File.DirAssets,"save_gray.png"))
    Main.PhoneList.SetSelection(Main.PhoneList.size) ' gehe zum letzten eintrag
    StartActivity(Main)

    Danke für Eure Hilfe im Voraus
     
  2. MaFu

    MaFu Well-Known Member Licensed User

    Unter Android ist immer nur eine Activity "aktiv". Du kannst also nicht einfach so von Deiner aktuellen Activity Funktionen oder Objekte einer anderen Activity aufrufen.
    Von wo und wie werden in der main Activity die Fahrzeuge geladen? Ev. kann man da ansetzen. Schließlich wirst Du ja Deine geänderten/neuen Fahrzeuge ja auch abspeichern.
     
  3. ernschd

    ernschd Member Licensed User

    Wie wäre es, wenn du das ganze umdrehst? Also zuerst die Daten der Fahrzeuge speichern oder löschen (z.B. in einer Sqlite-Datei), und beim Starten der Main-Activity die Liste jedes Mal komplett neu laden. Dann wird sie immer aktuell aufgebaut.
     
  4. jsk001

    jsk001 Member Licensed User

    Ich lade die Fahrzeugdatei in der Main Activity.

    Sub ReadContactList
    '-----------use list of cars-------------------------
    PhoneList.Visible=True
    SearchTxt.Visible=True
    Search.Visible=True
    BtnNext.Visible=True
    '-----------------------------------------------
    If File.ExternalWritable = False Then
    Msgbox("Cannot access to storage card.", "")
    Beep(300,300)
    Return
    End If

    If File.Exists(CheckSDcard.sd, "cars.txt") Then
    PhoneList.Clear
    Dim ContactsList As List

    ContactsList = File.ReadList(CheckSDcard.sd, "cars.txt")

    Dim cnt As Int
    cnt=ContactsList.Size - 1

    Dim trenner As String
    For i = 0 To cnt
    Dim C,name,number As String
    Dim lvd As ListViewData
    lvd.Initialize
    C = ContactsList.Get(i)
    trenner=C.IndexOf(",")
    If trenner >-1 Then
    number=C.SubString2(trenner+1,C.Length)
    name=C.SubString2(0,trenner)
    lvd.FirstRow = name
    lvd.SecondRow= number
    PhoneList.AddTwoLines2(lvd.FirstRow,lvd.SecondRow,lvd)
    End If
    Next
    Beep(300,1000)
    ActualPos=0
    If PhoneList.Size>-1 Then
    PhoneList.SetSelection(0)
    End If
    Else
    Msgbox("cars.txt not found on sdcard","File cars.txt is missing")
    End If
    End Sub
     
  5. ernschd

    ernschd Member Licensed User

    Deswegen würde ich die Quelle der Daten bearbeiten - somit hast du auch immer einen aktuellen Bestand.
    Wenn du nur die Liste veränderst, musst du am Ende die Änderung in die Quelle übernehmen und hast somit 2 Arbeitsschritte.
     
  6. jsk001

    jsk001 Member Licensed User

    Du hast natürlich absolut recht. Mit einer SQL Database währe es die sauberste, aber eben auch
    für Beginner nicht die einfachste Lösung.
    Was ich nicht verstehe ist, daß bei einem solchen Topsystem wie B4A im Listview so
    etwas wir listview1.setitem(i)="..." ...etc. trotz vieler ähnlicher Rückfragen in der Community nicht
    implementiert ist. Die Implementierung solte doch wirklich nicht so aufwendig sein.
    Ich würde mir das jedenfalls sehr wünschen. Das würde auch für Umsteiger von VB.net die
    Sache erheblich vereinfachen (und diese tolle Programmierungebung währe noch etwas perfekter).

    LG jsk001
     
  7. ernschd

    ernschd Member Licensed User

    Du könntest es auch so lösen (wobei ich das nicht wirklich elegant finde):

    In der Main-Activity eine Methode zum Hinzufügen eines Eintrags schreiben
    Code:
    Public Sub add(name As String, number As String)
        ListView1.AddTwoLines(name, number)   
    End Sub
    Und diese in der EditCars-Activity so aufrufen
    Code:
    Sub Button1_Click   
        CallSubDelayed2(Main, 
    "eintrag""1")
    End Sub
    Ich glaube auch nicht, dass es was mit B4A zu tun hat, sondern eher mit dem Activity-System von Android.
     
  8. jsk001

    jsk001 Member Licensed User

    Danke für die Unterstützung. Ich werde morgen schauen, ob ich das so implementiert bekomme, oder das Ganze
    dann doch per SQL realisiere.

    LG jsk001
     
  9. klaus

    klaus Expert Licensed User

    SQLite ist bei weitem nicht so schwer wie man sich es als Beginner vorstellt.
    SQLite zu lernen ist den Aufwand wert.
    Du kannst dir die Beispiele in meiner Unterschrift anschauen.
    Im User's Guide gibt es ein ganzes Kapitel darüber.
    Bevor Ich den User's Guide schrieb hatte Ich keine Ahnung von Datenbanken.
     
  10. MaFu

    MaFu Well-Known Member Licensed User

    Wo die Daten herkommen (Textdatei oder Datenbank) ist aber prinzipiell wurscht und hat mit Deinem Problem erst mal gar nichts zu tun (auch wenn natürlich eine Datenbank mehr Sinn macht und einiges vereinfacht).
     
  11. jsk001

    jsk001 Member Licensed User

    Hallo Manfred,
    Ich bedanke mich auf jeden Fall für Deinen Tip und ich denke, ich werde
    mich mal intensiver mit dem Thema SQL beschäftigen. Ich war halt von vb.net
    her mit Listviews vertraut und habe deshalb diese in meinem Projekt verwendet,
    ohne vorher die Grenzen ausgelotet zu haben. Unter vb.net kann man sehr flexibel damit
    arbeiten und deshalb ging meine Frage auch in diese Richtung.
    Vieleicht findet sich ja auch jemand von den Spezialisten, der das Listview mal in dieser
    Richtung like vb.net etwas aufbohrt. Ich glaube, daß viele von denen, die von vb.net kommen
    dafür dankbar sein würden und es ihnen die Arbeit schon vereinfachen würde.
    Einträge im Listview zu editieren währe sehr schön.
    Auf jeden Fall recht herzlichen Dank für die Mühe (und das Verständnis eurerseits).

    LG jsk001
     
Loading...