ListView auf Fragmenten

  • Hi Leute, ich hab für den Anfang mal ein paar Fragen allgemein zu ListViews auf Fragmenten. Welchen Adapter man verwendet usw. Ich habe noch gar keine Ahnung von solchen List Views, ausser das was ich bereits in irgendwelchen Anleitungen gelesen hab, aber das sieht so komplex aus wenn man noch nicht wirklich weiss mit welchem Werkzeug ich was am besten verwirklichen kann. Würde mich sehr freuen wenn sich jemand ein paar Minuten Zeit nimmt und mich an seiner Erfahrung teil haben lässt.


    Hierzu erst mal ein paar Eckdaten was ich vor habe. Ich habe bereits auf meiner MainActivity so eine Swipe Funktion mit 4 Fragmenten. Fragment 1+2 sollen eine ListView bekommen, die ListView nimmt eigentlicht den Platz auf dem kompletten Fragment ein bis auf ganz wenig am unteren Rand wo ein schmaler Button ist mit dem man der ListView später dann ein neues Item hinzufügen kann.


    Die ListView soll auch scollbar sein und ziemlich viele Items aufnehmen können. 100 würden übrig reichen.


    Klicke ich also auf den Button erscheint eine neue Activity (mit ein paar Feldern für Daten und einem Speichern und einem Abbrechen Button) in der ich Daten eintrage die später auf dem ListViewItem zu sehen sind.
    Die Daten sollen auch in eine SQLite Datenbank geschrieben werden nachdem ich den Speichern Button gedrückt habe.


    Angenommen ich habe schon ein paar Items gespeichert und die Daten werden auch einwandfrei in der Datenbank gespeichert, möchte ich nun z.B. die Daten im dritten Item ändern weil mir auffällt das ich mich vertippt habe. Dann würde ich gerne einfach auf dieses Item klicken können und die Daten nocheinmal bearbeiten können.


    nun möchte ich z.B das letzte Item in meiner ListView löschen, dafür würde ich gerne auf das Item klicken, dieses öffnet sich dann und hat einen Button zum löschen. Fertig.


    Vielen Dank schon mal

  • Wenn du schon eine Datenbank eingeplant hast, dann würde ich dir einen CursorAdapter empfehlen (auch wenn der deprecated ist).
    Gegenüber anderen Adapterformen hat der den Vorteil, das immer nur so viele Einträge im Speicher gehalten werden, wie für die Darstellung gerade benötigt werden;
    bei den anvisierten 100 Items spielt das noch keine Rolle (mit aktuellen Geräten jedenfalls), aber wer weiß schon, wohin sich das Projekt noch entwickeln wird ;)
    Bei entsprechend optimierter Datenbank bekommst du auch mit 100.000 Einträgen noch keine spürbaren Ladezeiten 8)


    Auf die Liste setzt du einen OnItemClick Listener, der dann mit dem Primärschlüssel des angetippten Items den Editor aufruft, der wiederum neue Einträge erstellen und bestehende aktualisieren bzw. löschen kann (also 3 Buttons Löschen, Abbruch, OK am unteren Rand).


    Beantwortet das deine Fragen?

  • Wenn du schon eine Datenbank eingeplant hast, dann würde ich dir einen CursorAdapter empfehlen (auch wenn der deprecated ist).


    Generell würde ich auf jeden Fall die Finger von allem lassen was irgendwie deprecated ist.
    Die setzen den Hinweis nicht aus Spaß an der Freude, sondern weil sie festgestellt haben, dass da irgendwas ganz heftig schief laufen kann.


    Ich weiß allerdings nicht wie Du darauf kommst, dass der CursorAdapter deprecated sei.
    Lediglich einer der Konstruktoren, ein paar interne Methoden und ein paar Konstanten sind deprecated und bei denen steht dokumentiert, wie man statt dessen vorgehen soll.


    Gegen CursorAdapter(Context, Cursor, int) spricht nur, dass er erst ab API 11 zur Verfügung steht.
    Gegen CursorAdapter(Context, Cursor, boolean) spricht gar nichts.


    Nichts desto weniger sollte man den Hinweis sehr ernst nehmen und ab API 11 einen LoaderManager mit CursorLoader verwenden, da der CursorAdapter auf dem UI Thread herumfuhrwerkt – und das mag Android seit API 11 ja schon bei Netzwerkaktivität nicht.


    BTT:
    Deine Idee mit den Buttons und Aktivities, also Dein gesamtes UI-Konzept, finde ich sehr sehr schwierig, [prototype0815].
    Bitte lies Dir bevor Du wirklich anfängst die Design Guidelines durch und beherzige sie. Ansonsten wird jeder Deine App hassen, weil sie sich so anders als vom Betriebssystem gewöhnt verhält.


    1) Tippen auf einen Eintrag bringt einen zur Detailansicht, nicht zu einer Editieransicht. Diese sollte manuell umschaltbar sein.
    Beispiel (4.2.2): Settings->WLAN – Du könntest einen Edit-Switch einbauen (ähnlich dem Knopf zum Aktivieren des WLAN) oder über ein Menü die Option zum Bearbeiten anbieten (ähnlich dem Menü mit Scan, Erweitert etc.pp.)


    2) Speichern und Abbrechen-Buttons sind soooo 1975. Siehe die Notizen App auf dem Xperia Z1. Ich kann nur zurück navigieren. Steht irgend etwas in der Notiz drin, dann will ich sie wohl auch gespeichert haben. Also wird sie beim Zurückgehen gespeichert. Steht da nix drin, will ich das sicherlich auch nicht speichern.


    3) Ein Tippen bringt einen immer noch zur Detailansicht. Möchtest Du den oben vorgeschlagenen Weg nicht gehen, dann solltest Du auf ein Long Press mit einem Menü reagieren, in dem Du Editieren und Löschen anbietest.


    Generell solltest Du Dich bei Deinen Apps an den vorinstallierten Android Apps orientieren.
    Wie geht das Adressbuch mit der Kontaktübersicht und den Detailansichten zu den Kontakten um? Wie kannst Du einen Kontakt löschen oder bearbeiten? Wie kannst Du einen neuen Kontakt anlegen, speichern oder verwerfen?


    Und noch ein paar persönliche Vorschläge:
    a) Statt eines 'Add' Buttons unten wäre ein 'Add' Item in der Action Bar die schönere Alternative


    b) Wenn Du richtig cool sein möchtest kannst Du noch eine Swipe-Geste in Deine ListView einbauen, die beim Swipe nach links oder rechts den Inhalt durch einen 'Eintrag löschen?' Button ersetzt. Damit nimmst Du dem User einen unnötiges Tippen ab.

    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!«

  • Zitat

    Ich weiß allerdings nicht wie Du darauf kommst, dass der CursorAdapter deprecated sei.

    War eine Verwechslung, der "deprecated" Hinweis bezog sich auf SimpleCursorAdapter und die dafür notwendigen startManagingCursor / stopManagingCursor.




    Zitat

    Steht irgend etwas in der Notiz drin, dann will ich sie wohl auch gespeichert haben. Also wird sie beim Zurückgehen gespeichert.

    Ja, ist sehr elegant (würde mir persönlich auch besser gefallen) -- bis du einen Kunden an der Backe hast, der sich seine Notiz mit irgendwelchen Änderungen verhunzt und darum doch lieber die letzte Fassung behalten will :)
    Der Kompromiss wäre dann wohl, bei "zurück" zu speichern, aber für den Notfall einen Abbruch-Button zu behalten.

  • Ja, ist sehr elegant (würde mir persönlich auch besser gefallen) -- bis du einen Kunden an der Backe hast, der sich seine Notiz mit irgendwelchen Änderungen verhunzt und darum doch lieber die letzte Fassung behalten will :)
    Der Kompromiss wäre dann wohl, bei "zurück" zu speichern, aber für den Notfall einen Abbruch-Button zu behalten.


    Gegen Doofheit ist kein Kraut gewachsen. ;)
    Nur ist eine Notiz ja nun wirklich keine Doktorarbeit. Ich werde mir doch wohl die drei Minuten nehmen können meine Notiz so anzupassen, dass sie mir wieder gefällt.


    Jedenfalls meinte ich aus diesen Gründen, er solle sich an Anwendungen wie dem Adressbuch orientieren.
    Bei meinem ist es so, dass der Zurück-Button im ActionBar einfach 'Fertig' heißt und speichert, die Zurücktaste am Telefon den Editiermodus ohne Speichern verlässt.

    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!«

  • Zitat

    Gegen Doofheit ist kein Kraut gewachsen. ;)

    Hehe, das stimmt wohl meistens, aber in diesem Fall halt schon: eine Abbruch-Möglichkeit ;)


    Zitat

    dass der Zurück-Button im ActionBar einfach 'Fertig' heißt und speichert, die Zurücktaste am Telefon den Editiermodus ohne Speichern verlässt.

    Passt ja dann.


    Editoren mache ich allerdings gerne als Dialog, damit die auch auf nem Tab noch anständig aussehen, und da verzichte ich dann zugunsten einer ButtonBar (mit OK, Abbruch, Löschen) auf eine ActionBar.


    Da weiß man jetzt nicht, was der TE genau vor hat, aber er hat ja jetzt genug Infos, um sich für eine der Alternativen zu entscheiden.

  • Da weiß man jetzt nicht, was der TE genau vor hat, aber er hat ja jetzt genug Infos, um sich für eine der Alternativen zu entscheiden.


    Exakt.
    Und um jetzt völlig off-topic zu werden: ich persönlich find ja
    [Blockierte Grafik: http://www.victormoreno.com/images/misc/header.jpg]
    um Längen besser als
    [Blockierte Grafik: http://www.fangoria.com/new/wp-content/uploads/2014/01/EvilErnieFeat.jpg]


    Wobei natürlich die gesamte Chaos Comics Reihe großartig ist. :)

    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!«

  • Zitat

    Und um jetzt völlig off-topic zu werden: ich persönlich

    Wenn das hier erlaubt ist, dann mache ich mal mit:
    ich kenne die beiden Titel nicht, aber nach den geposted'en Grafiken und deren Aufschriften beurteilt muss ich dir da mal wieder vollkommen recht geben ;)

  • klasse Leuts einfach klasse ^^ ^^


    ich überdenk nochmal was ich genau machen will innerhalb der ListView, aber ich muss dazu nochmal erwähnen das ich blutiger Anfänger bin und deshalb evtl. nicht die "coolere" aber auch schwierigere Variante wählen werde. Ausser ich darf euch ne längere Zeit mit evtl. dämlichen Fragen auf den Sack gehen :P


    p.s. ich bin bereits so weit das alles erledigt ist ausser die ListView und die SQLite Datenbank

  • ich sehe ganz oft das diese Anleitungempfohlen wird, aber ich check das net...
    Ich habe in meiner MainActivity

    Java
    public class MainActivity extends FragmentActivity {


    mehrere lokale Klassen


    muss ich diese Klassen von "ListFragment" erben lassen, anstatt von "Fragment"?



    Nun zu den Items, ich muss ja für die Items ein Layout zur verfügung stellen. Das mach ich indem ich einfach eine Layout.xml erstelle und diese so gestalte wie ich es brauche, Buttons, TexViews, Labels drauf usw. mehr nicht, stimmt´s?


    Listener: OnItemClickListener, diese Methode muss in meinem Fall innerhalb meiner lokalen Klasse "Section1Fragment" erstellt werden. Richtig?

    Java
    listView.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        Toast.makeText(getApplicationContext(),
          "Click ListItem Number " + position, Toast.LENGTH_LONG)
          .show();
      }
    });


    was ist dieses "listView" hier im Quelltext? ist das meine Klasse, die vom Fragment erbt?

  • Zitat

    Ausser ich darf euch ne längere Zeit mit evtl. dämlichen Fragen auf den Sack gehen


    Das Kriterium sollte eigentlich dein Anspruch an die Qualität der App sein B-)


    Nerven wirst du hier auch niemanden, solange nicht der Eindruck entsteht das du fertige Lösungen für Copy&Paste haben willst;
    für ein deutschsprachiges Forum geht es hier erstaunlich freundlich zu ^^

  • Zitat

    muss ich diese Klassen von "ListFragment" erben lassen, anstatt von "Fragment"?

    Nein, musst du nicht; du kannst ja auch von Activity erben, obwohl dein Layout ein ListView enthält.
    ListFragment stellt (wie ListActivity) nur ein paar Hilfen zur Verfügung, einen echten Vorteil konnte ich da aber bislang nicht erkennen.


    Zitat

    Das mach ich indem ich einfach eine Layout.xml erstelle und diese so gestalte wie ich es brauche, Buttons, TexViews, Labels drauf usw. mehr nicht, stimmt´s?

    Ganz genau.


    Zitat

    was ist dieses "listView" hier im Quelltext? ist das meine Klasse, die vom Fragment erbt?

    listView ist hier ein ListView, ermittelt via findViewById() aus deinem Layout.
    Das direkte Anhängen des Listeners ist die Alternative zu "implements"

  • ich kenne die beiden Titel nicht, aber nach den geposted'en Grafiken und deren Aufschriften beurteilt muss ich dir da mal wieder vollkommen recht geben ;)


    Soso. Ich vermutete bei dem Avatar tatsächlich eine Verbindung zu Herrn Ernie. :P


    [prototype0815]
    Die Tutorials von Herrn Vogel sind qualitativ sehr hochwertig, vor Allem im Hinblick auf die Zielgruppe.
    Sie setzen lediglich voraus, dass man sich alles durchliest. "Standalone Schnipsel" gibt es dort nicht, zu jedem Beispiel gibt es darüber und darunter mindestens einen Absatz Text.


    Mein Ausbilder meinte einmal 'Es gibt keine dummen Fragen, es gibt nur faule Fragen'.
    Und faule Fragen nerven extrem. ;P

    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!«

  • hab da einen Tollen Fehler wenn ich folgenden code schreibe... und zwar an der Stelle von new OnItemClickListener

    Java
    ListView listViewSection1 = (ListView) rootView.findViewById(R.id.listViewFuel);
    	 	listViewSection1.setOnItemClickListener(new OnItemClickListener() 
    	 	{
    	 		  @Override
    	 		  public void onItemClick(AdapterView<?> parent, View view,
    	 			int position, long id) 
    	 		  {
    	 		   
    	 		  }
    	 		});


    [Blockierte Grafik: http://my.funpic.de/show-photo/805965-PIC.jpg]


    ich finde android programmierung ist total deprimierend wenn man ne Stunde oder zwei an so ner kacke sitzt und einfach net weiter kommt...


    allerdings macht es auch sehr viel spass wenn man irgendwann ein ergebnis zu sehen bekommt, das hällt mich irgendwie immer am Ball bei der Sache hier 8)

Jetzt mitmachen!

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