RecyclerView Anweisungen wie remove löschen parallel den Datensatz ?

  • Hallo,


    wahrscheinlich eine dumme Frage.

    Man arbeitet bei der Recyclerview sinnvoller Weise mit einem Datamodel.


    1. Wenn ich im ViewAdapter z.B. mList.remove(model) realisiere, wird dann parallel der Datensatz in der Datenbank anhand der ID gelöscht ?

    2. Kann ich ein mList.remove(model) z.B. auch in der MainActivity ausführen ? (wenn ja denke ich über den Aufruf einer Methode im ViewAdapter, die remove realisiert ?).


    Ich würde mir eine Menge Dateiarbeit sparen, wenn parallel die Database verarbeitet wird.


    Danke Wolfgang

  • 1. in der DB wird damit bestimmt nichts gelöscht.

    Damit Löschst du etwas aus der Liste. Deine Liste wurde sicherlich durch einen DB Abfrage erstellt. Die Liste selber reift nicht auf die DB .




    2. ob du das in MainActivity nutzen kannst kann dir ohne Code keiner sagen.

    Es kommt darauf an wo du die Liste mList erstellt hast.

    Ist es eine lokale Variable oder Instanzvariable oder ist es eine Klassenvariable …

  • OK, danke, das hat mir geholfen.

    verstehe zwar nicht, was es bringt ,wenn nur in der View gelöscht wird und nicht parallel in der DB, muss ich ja dann zusätzlich machen, obwohl ich mit dem Model arbeite.


    Ich lösche bis jetzt immer erst in der Datenbank und lade dann die View neu. Die View-Befehle (wie remove) ergeben für mich bei der Verwendung einer Datenbank dann keinen Sinn, oder .. !?

  • Wenn du zb ein externe DB im Internet benutz .

    wenn du jetzt einige Einträge in der liste Löscht kannst du zb erst am ende die Daten in der DB aktualisieren. Netzlast.


    Wenn die Daten von der DB aus verschiednen Tabellen kommen wird es auch schwierig für eine Automatik.



    Das sind zwei einfache Punke die mir da Spontan dazu einfallen.

  • verstehe zwar nicht, was es bringt ,wenn nur in der View gelöscht wird und nicht parallel in der DB,

    Woher soll die Liste wissen woher die Daten herkommen?

    Woher soll sie wissen in welche TD Tabelle , Welche DB … sie bearbeiten soll?



    Schaue dir an was genau das Java Collection Framework ist.

    Java Collection: Alles über das Java Collection Framework!
    Das Java Collection Framework: Alles was du wissen musst! ✅ Alle Interfaces, Klassen & Methoden im Überblick! ✅ Inklusive Praxisanwendung!
    codegree.de




    obwohl ich mit dem Model arbeite.

    Das Model bildet ja nur einen einzigen Datensatz deiner Tabelle (oder besser deiner DB Abfrage die ja auch zb. Joins beinhalten ) ab, mehr nicht.

    In jeden Objekt vom Typ "Model" wird ja ein Datensatz gehalten . Und alle zusammen dann in der Liste.



    Model ist ja nur ein allgemeiner Ausdruck für deine Daten Klasse.

  • Woher soll die Liste wissen woher die Daten herkommen?

    Woher soll sie wissen in welche TD Tabelle , Welche DB … sie bearbeiten soll?


    Na ja, wenn die Liste über ein Data-Model mit DB-Bindung aufgebaut ist sollten eigentlich alle Daten wie ID usw. bekannt sein.

    Ich sehe es so, es ist halt von Google (bzw. Oracle mit JAVA) noch nicht realisiert !!

  • Zitat

    Na ja, wenn die Liste über ein Data-Model mit DB-Bindung aufgebaut ist sollten eigentlich alle Daten wie ID usw. bekannt sein.

    Ich sehe es so, es ist halt von Google (bzw. Oracle mit JAVA) noch nicht realisiert !!

    Dann zeige mal den Code dazu dann sehen wir weiter.


  • Der Code ist ne ganze Menge, reicht erst mal der ViewAdapter ?

  • Im Adapter hast du ja „dataModell_TaskList“ als Liste, und die wird angezeigt.

    du hast vielleicht deine mList aus der Activity an den Adapter übergeben

    sehe ich nicht.


    zeige doch mal dein Model ich denke das ist eine einfache datenKlasse nichts was man Beobachten kann.


    Wenn dann müsstest du die Liste beobachten. Dann sollte die Liste im ViewModel sein vom Typ LiveData damit du ein Observer Pattern darauf ausführen kannst.


    das Heißt wenn du das willst solltest du dir das MVVM Pattern von Android anschauen.


    PS wenn Code dann bitte die ganze Klasse mit dem Argumenten.

    Auch beim Observer musst du Code schreiben der die DB Updatet.




    PS.2

    wo ist eigentlich das Problem du bekommst doch in deinem Listener / Interface die Pos und wahrscheinlich die id des Datensatzes in der DB Tabelle .

    Wo ist jetzt das Problem den Datensatz in der DB zu löschen.

    Wenn man sich sinnvolle Methode in der DB Klasse dafür geschrieben hat.

  • ich danke Dir ... das mit dem Observer hattest Du mir früher schon mal empfohlen.


    ich beende den Chat hier, da ich ja eigentlich in meiner APP die Verbindung von der Datenbank zur Liste und die damit verbundene Verwaltung der IDs und Positionen gelöst habe. Ich dachte ja nur, ob es eventuell einfacher geht, da auch dem System die ID im ViewAdapter zur Verfügung steht !


    Es geht halt nicht .......

  • Gehen Tut viell. Würde sicherlich auch im Adapter gehen.


    Nur sollte man das nicht machen.

    Der Adapter soll die Liste anzeigen mehr nicht. Produktiver Code sollte nicht in der View sein.



    Es ist vielleicht sinnvoll dich mit dem Entwurfmustern auseinander zusetzen.

    MVC, MVVM ,…

    dazu würde ich das Buch Eric „Freeman - Entwurfsmuster von Kopf bis Fuß“ empfehlen.


    Für größere Projekte ist so was immer sinnvoll.


    Das du in deinem Code schon im Adapter auf die DB direkt zugreifst um irgendwelche Indexe zu bekommen die du auch schon vorher im Produktiven Teil haben solltest.

    Ist ein schlechter und meist auch Fehlerträchtiger Programmierstiel.


    Bei größeren Projekten wirst du damit auf die Nase fallen. Da ist sinnvolles Design Patterns angesagt.

  • OK, danke für die vielen Hinweise ...


    Den Code im Adapter bzw. den DB-Zugriff habe ich verwendet, um die Focus-Position der jeweiligen Liste zu laden und dann zu kennzeichnen.

    Im Fragment habe ich die Kennzeichnung nicht hinbekommen ....

  • Das mache ich doch schon über den ClickListener. Natürlich habe ich dort die ID und die Position und kann im Fragment darauf zugreifen, aber nur nach Click.


    Es geht mir um die prinzipielle Markierung der Zeile. Bis jetzt setzt ich den Focus im ViewAdapter. Bei einem Clickevent auch kein Problem. Um prinzipiell zu wissen wo steht der Focus in meinem in der Summe ca. 50 Listen, speichere ich die ID der Zeile in eine Extradatei, die ich dann im Viewadapter auslese.


    Habe bis jetzt keinen Weg gefunden, die Dateiarbeit in der Activitay/Fragment zu machen und dort dann auch den Focus zu setzen ?!

  • Ja OK, die Formelierung "Focus" iust nicht ganz richtig. Das eigentliche Fokussieren klappt natürlich .

  • //Ich meine die farbliche Gestaltung einer konkreten Zeile ohne Click-Event, welches ich im ViewAdapter realisiere.

    Das war mir beim lesen des Codes schon klar.



    Du könntest doch auch den Focus (int) gleich dem Adapter im Konstruktor mitgeben.


    Wenn du den Fokus an mehreren Stellen (Fragmenten) brauchst .

    Könntest du ihn zB auch in einer Klassenvariablen halten. Oder in einer Singeleton Klasse.

    Natürlich auch in einem ViewModel was ja im erweiterten sinne auch ein Singeleon sein kann.

    Du kannst ja dann auch im Adapter auf deine ViewModel zugreifen. In dem du es einfach auch im Konstruktor mit an den Adapter gibst. Und auch im Adapter kannst du dann Veränderungen setzen.

    Auch der Adapter könnte auch auf Veränderungen durch Beobachtung reagieren.



    Singleton, ViewModel da sind wir wieder bei den Entwurfsmustern.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!