Zugriff auf die MainActivity von einer anderen Activity

  • Hallo,


    wie war denn das nochmal, wenn ich über einen button einen neue Activity (DebtorHistory) öffne und und DebtorHistory eine Listview anzeigen soll, welche aber ein objekt, der sich in der Mainactivity befindet, benötigt? Braucht man dafür eine Instanz zu der Mainactivity?


    In meinem Fall möchte ich, dass DebtorHistory sobald diese geöffnet wird, informationen aus einer sqlite datenbank ausliest und anzeigt.


    Habe in der MainActivity ein Objekt der Klasse DataBaseHandler erstellt, welche die nötigen methoden für die DB beinhaltet.



    Die DebtorHistory.class wird durch ein button klick in dem fragment Debtor ausgeführt


    die DebtorHistory.class:


    Bekomme einen nullpointer in der Zeile startManagingCursor(cursor = mainActivity.myDBHandler.getAllDifferentNames1());


    Oder muss ich über Intent irgendwas übermitteln?? :-/

  • Du solltest keine Objekte übergeben*. Im Falle von Datenbankzugriffen wäre es sinnvoller, Du übergibst die _id des Eintrags.


    Das packst Du dann in ein Extra und übergibst das an das Intent, das Du aufrufen möchtest.


    *) Falls es doch irgendwie sein muss: Du kannst jedes Objekt als Extra in das Intent stopfen, dass Parcable unterstützt. Ist aber meiner Meinung nach viel zu viel Overhead und Ressourcenverlust, da Dein Objekt gepackt, transferiert und entpackt wird - da kannst Du lieber eine neue Instanz aus der Datenbank ziehen.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Marco,


    danke für deinen Post, was ich aber leider nicht ganz verstanden habe!? Wie meinst du das mit _id des eintrags übergeben?


    Für besseres Verständnis: ich habe eine application mit einer Actionbar, also zwei fragmente (fragment A und fragment B), die man hin und her swipen kann. Die Datenbank wird geöffnet und erstellt über die MainActivity, also sobald die app gestartet wird. fragment A enthält einen button, dass eine weitere activity (DebtorHistory) öffnet die eine listview beinhaltet und diese mit den daten aus der Datenbank füllen soll. heißt im klartext, dass wenn ich auf den button klicke, ich eine liste von einträgen automatisch zu sehen bekomme.


    Daher weiß ich nicht, wie du das mit dem _id meinst. (sry) ?(


    ich hab mal zum testen mal in der DebtorHistory klasse noch einmal ein objekt der Klasse DatabaseHandler erzeugt um zu sehen ob das geht.



    geht aber nicht :(



    eigentlich müsste das doch gehen!?? ?( ?(

  • Mit _id meine ich den eindeutig identifizierbaren Primärschlüssel Deiner Datensätze.


    Beispiel: eine Handball-App in der Du mindestens vier Tabellen hättest.

    Code
    Verein  [_id | name]
    Spiel   [_id | heimmannschaft_id | gastmannschaft_id | spiel_datum]
    Spieler [_id | vorname | nachname | verein_id ]
    Torwurf [_id | trefferzone | hat_getroffen | spielminute | spiel_id | spieler_id]


    Gehen wir weiter davon aus, Du zeigst gerade alle Spieler einer Mannschaft in einer Liste an. (Natürlich nur Vorname und Nachname)
    Gehen wir außerdem davon aus, Du möchtest mit einem Longpress auf eine Zeile der Liste die Torwurfübersicht dieses Spielers haben.


    Dann packst Du die _id des Spielers an dieser Position in ein Extra des Intents und in der neuen Activity liest Du dann die Daten aus der Torwurftabelle:

    Java
    "SELECT trefferzone, hat_getroffen, spielminute FROM Torwurf where spieler_id="+getExtra("SpielerID");


    (Natürlich müsstest Du Maßnahmen treffen, was passieren soll, wenn keine SpielerID in den Extras übergeben wurde.)


    Das ganze lässt sich auch beliebig erweitern, beispielsweise wenn Du alle Tore aus einem speziellen Spiel nachschaust.

    Java
    "SELECT trefferzone, hat_getroffen, spielminute FROM Torwurf where spiel_id="+getExtra("AktuellesSpielID");


    Oder wenn Du wissen möchtest, wie ein bestimmter Spieler in einem bestimmten Spiel abgeschnitten hat.

    Java
    "SELECT trefferzone, hat_getroffen, spielminute FROM Torwurf where spieler_id="+getExtra("SpielerID")+" AND spiel_id="+getExtra("AktuellesSpielID");

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

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