Beiträge von and.dev

    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"

    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

    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 ;)

    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.

    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.

    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?

    Problembeschreibung fehlt :P


    OK, dem Code nach funktioniert das Schreiben in die DB schon mal nicht.
    Hast du den Code aus verschiedenen Quellen zusammenkopiert?


    Guck:

    Führt zu einer Tabelle Daten(_id, Titel, Content), da kannst du mit einer Anweisung

    Zitat


    INSERT INTO "+Database_Table+" (name, score)...

    natürlich nichts einfügen.

    Nein, in der Form kannst du das nicht voranstellen, aber in dieser:


    Zitat


    View v = inflater.inflate(R.layout.bmicalc_1, container, false);
    EditText BMI_Alter = (EditText) v.findViewById(R.id.EditText01);
    // restlicher Code...
    return v;

    ...wenn denn unbedingt alles in der Funktion sein muss.
    Ich würde den Initialisierungscode eher in onActivityCreated() unterbringen.

    Lies deinen Code mal aus Sicht der Maschine, die ihn ausführen soll.
    1. Zeile:

    Zitat

    EditText BMI_Alter = (EditText) getView().findViewById(R.id.EditText01);

    Damit beabsichtigst du eine View in deinem Layout "R.layout.bmicalc_1" zu finden.
    Woher weiß die Maschine, welches Layout gemeint ist? Wo definierst du das?


    Genau, in der letzten Zeile:

    Zitat

    return inflater.inflate(R.layout.bmicalc_1, container, false);

    Welchen Wert wird deine Variable BMI_Alter demnach also erhalten?
    Genau: null


    Jetzt klar, warum das nicht funktioniert?
    Frag gerne nach, wenn noch etwas unklar ist.

    Das wird mit einem Schalter auf der Seite in deinem PlayStore Account gelöst, auf dem du auch die Texte, Bilder etc. bearbeitest; AFAIR ist der ganz unten auf der Seite, und da steht was von "wird bald nicht mehr unterstützt".
    Kann also sein das der bei neu eingestellten Projekten vielleicht gar nicht mehr angezeigt wird.


    Google möchte stattdessen, das du das über "market licensing" realisierst - da kann man deine App zwar kopieren, nützt aber nix, weil die .apk "weiß", für welchen Account sie gekauft wurde und auf anderen dann entsprechend reagieren kann.

    Bei "Holo Light with DarkActionBar" sagt ja auch schon der Name, das du nicht bekommst was dir vorschwebt 8)
    Was bekommst du denn bei "Holo Light"? Auch eine dunkle ActionBar?
    Würde mir seltsam erscheinen, wenn beide Punkte das gleiche Ergebnis liefern würden.


    Wenn der Punkt tatsächlich nicht wie interpretiert funktioniert, dann kannst du dein Wunschergebnis wohl gar nicht (direkt) erreichen, es sei denn es gäbe eine Möglichkeit, der Auswahl-Combo selber weitere "Vorlagen" hinzu zu fügen.


    ...oder habe ich deine Frage falsch verstanden?



    BTW: weil du das in der Signatur stehen hast: "report a problem" - "an" wird nur bei nachfolgendem Vokal verwendet.

    Ich würde normalerweise (wie mein Vorredner) einen CursorAdapter für sowas verwenden;
    wenn ich einen Custom-Adapter verwende (wie du in deinem Code), dann verwende ich adapter.notifyDataSetChanged() für den Fall, das sich Daten geändert haben.
    Im Falle des Löschens würde ich dem Adapter eine delete() Funktion spendieren, die das entsprechende Item aus der internen Datenstruktur entfernt und abschließend das notify... ausführt (die Datenbankabfrage erneut auszuführen mag für ein paar Datensätze OK sein, aber was wenn deine Tabelle mal mehrere 1000 Einträge hat?)


    Allerdings sollte deine Methode (neuen Adapter setzen) auf den ersten Blick eigentlich auch funktionieren, da das setAdapter() die Liste eigentlich auch zum Redraw animiert...
    Ist es sicher, das der neue Adapter den überzähligen Datensatz nicht mehr enthält (per Debugger oder Log.d() geprüft)?


    Deine getView() Methode solltest du in jedem Fall noch mal überarbeiten :)
    Der convertVew wird nicht aus Spaß übergeben, sondern damit man ihn wiederverwendet, und für jedes Item erneut einen Font zu laden (immer wieder, dank des ignorierten convertView) ist sicher auch nicht die effizienteste Art, mit den Resourcen umzugehen.



    Da diese Fragen nur zum Ziel führen, wenn jemand Hellseher ist oder eine Glaskugel besitzt, würde ich das Problem anders angehen:


    Wenn du eher der Planer bist:
    Du wirst ja ein Konzept haben, also wissen was deine App am Ende können soll.
    Dann weißt du ja auch bereits, welche APIs erforderlich sein werden und kannst daher in der Doku nachschauen, welches minSDK dafür benötigt wird (Berücksichtigung der Kompatibilitäts-Lib nicht vergessen)


    Wenn du eher der Macher bist:
    Setz dein minSDK einfach erstmal bei 2.3 an und leg los; wenn du APIS verwendest, dann kannst du jeweils schnell nachsehen, ab wann die verfügbar sind (oder du lässt lint diese Aufgabe erledigen)


    So, jetzt hast du entweder den Fall, das du gar nichts ab 4.0 brauchst (was nicht in Googles Lib ist), dann hat sich das Problem von alleine erledigt (gar nicht so unwahrscheinlich).
    Hast du doch einzelne Stellen, dann kannst du jeweils schauen:
    - ob du die Funktionalität in älteren Version halt nicht anbietest
    - wie viel Aufwand das Nachbilden der betreffenden Funktionalität auf älteren Versionen macht
    - ob es vielleicht fertige Libs gibt, die du dafür benutzen kannst (Beispiel wäre etwa Drittanbieter-Libs für Holo Style oder ActionBar)
    ...


    Je nach Aufwands-Abschätzung kannst du dann entscheiden, ob es dir das wert ist, die alten Versionen zu supporten, oder ob du dein minSDK hoch setzt.

    Zitat

    hat wunderbar geklappt. danke dir

    Gerne - ist für sowas in diesem Forum nicht eigentlich die Bedanken-Funktion gedacht?


    Zitat

    strings die in der db abgelegt sind ohne die leerzeilen bzw. ohne groß/klein Buchstaben zu prüfen?

    ...where upper(trim(name))='OLAF'


    sollte das gewünschte leisten.
    eine gute Quelle für solche Fragen ist übrigens sqlite.org ;)