Listeninhalte gut und performanceschonend aufrufen

  • Hallo an Alle,


    ich hätte gern gewusst, wie ich Listeneinträge programmieren kann, also deren Inhalte beim anklicken des Listeneintrags. Meinen bisherigen Kenntnissen nach könnte ich für jeden Listeneintrag eine neue Activity programmieren, welche nach Anklicken des Listeneintrages gestartet werden soll. Das ist jedoch dann sehr aufgebläht, da ich viele Listeneinträge habe. Geht das nicht irgendwie eleganter, sprich, dass ich nur eine Activity programmiere und dann der Inhalt variabel je nach geklicktem Listeneintrag eingefügt wird ? Inhalt soll aus Text bestehen (länger). Vielen Dank schon mal.

  • Das Zauberwort heisst Intents. Das heisst



    Java
    String katzentext = "Ich bin der Text";
    
    
    
    
    Intent i=new Intent(context,MeineSuperActivity.class);
    i.putExtra("id", userid);
    i.putExtra("name", username);
    i.putExtra("cattext", katzentext); 
     context.startActivity(i);



    In deinem Fall würdest du einen Text übergeben wollen und dann in deiner Activity wieder
    abholen und ausgeben.




    Du kannst allerlei primitive Daten übergeben (Integer, Double, Strings )
    , möchtest du eigene Datenstrukturen an die Activity übermitteln, dann muss dieses Objekt parcable sein.



    Nun noch eine kleine Anmerkung:
    ich bin jetzt kein Speicherguru, aber jedes öffnen einer Activity
    verbraucht Arbeitsspeicher, ebenso die Übergabe der Daten.
    Ich weiss jetzt nicht wie lange dein Text ist, bzw. woher dieser Text kommt.


    Elegant wäre zum Beispiel:


    Die Texte liegen in einer Datenbank, diese ist zum Beispiel global über deine Applicationklasse verfügbar.
    Jetzt übergibst du nicht kilobyteweise Stringdaten an deine Activity - sondern einfach eine Int ID und holst Dir in deiner
    neuen Activity die Daten aus der DB.
    Wie gesagt, so etwas macht bei grossen Mengen Text bestimmt Sinn.

  • Ganz einfach du musst dort deinen Context angeben. Wenn du den nicht in der "context" Variable gesteckt hast, kann er auch nicht Wissen, was "context" ist. Wenn du dich direkt in der Activity und nicht innerhalb einer inneren Klasse befindest, kannst du diesen mittels "this" übergeben.


    Zitat

    Intent i=new Intent(this,MeineSuperActivity.class);


    Du könntest natürlich auch die Doku dazu konsultieren. Activity leitet z.b von ContextWrapper ab. Beeinhaltet also getContext() bzw. findet sich auch in android.content.Context eine weitere Methode: getApplicationContext().


    Siehe Vererbung:


    http://developer.android.com/r…android/app/Activity.html

  • Hallo zusammen,


    nachdem ich nun Einiges probiert habe und nicht so recht weiterkommen, möchte ich Euch nochmal um Hilfe bitten. Alsomein Ziel ist, eine ListView zu erstellen, bei welcher, nachdem man einen Eintrag in der Liste ausgewählt hat, eine neue Activity gestartet wird, welche Daten aus einer Datenbank anzeigt. Und zwar den zum Listeneintrag zugehörigen Datensatz. Hat evtl. jemand eine Link für mich mit Source Code, wo sowas schonmal abgearbeitet ist ? Ich komme nämlich mit Schnippseln nicht zurecht, da ich von dem Rest, welcher dann in der Datei stehen muss auch noch nicht so recht ne Ahnung habe. Bin für jede Hilfe dankbar.

  • Hallo kaetzchenfg,


    das ist ja das Ziel der Übung: eine Activity mit ListView und eine Activity mit Daten-View.


    Vielleicht liegt dein Problem an folgender Stelle:


    Die Daten-Ansicht hat eine layout.xml-Datei - dort hast du wahrscheinlich die Strings eingetragen, die angezeigt werden sollen. Das brauchst du aber nicht - die Einträge müssen nämlich noch auf die aktuellen Werte gesetzt werden.


    In der layout.xml müssen aber die android:id gesetzt werden, damit du im Code auf die Elemente zugreifen kannst.


    In der DatenAnsichtActivity bekommst du mit dem Code, den killphil angegeben hat, die Daten des aktuellen Datensatzes.


    Diese müssen dann in den View eingefüllt werden:

    Java
    TextView meinTextView1 = (TextView) findViewById(R.id.view_id);
    meinTextView1.setText(id);
    TextView meinTextView2 = (TextView) findViewById(R.id.view_name);
    meinTextView2.setText(name);
    TextView meinTextView3 = (TextView) findViewById(R.id.view_katzentext);
    meinTextView3.setText(katzentext);


    Dann kann ich noch aus der Android-Doku den Text Starting Another Activity empfehlen - der Link führt dich gleich auf den Teil Receive Intent. Aber davor gibt's bestimmt auch noch interessante Abschnitte. B-)


    Und zu deiner Sorge mit Resourcenverbrauch: die DatenAnsichtActivity wird zwar immer wieder neu gestartet und muss die Eingaben abarbeiten, aber genau dafür sind die Activities auch gebaut. Keine Sorge, die alte DatenAnsichtActivity wird bei Gelegenheit aus dem Speicher gelöscht. Das siehst du, wenn du mit einem Emulator deine App ablaufen läßt und im LogCat die Meldungen anschaust - dauernd wird mal wieder Speicher freigegeben.


    Viel Erfolg
    UweApps

Jetzt mitmachen!

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