Beiträge von nono124

    Ok werde es am we vielleicht mal testen, u d dein Projekt laden.
    Wie gesagt finde ich den ansatz total ungünstig für dein Vorhaben. Und was hast du wenn das leuft auch nicht viel. Ok an Erfahrung gewonnen. Eingaben macht man in eine DB und man prüft sie vorher. Zeit Eingaben wurde ich mir den timepicker machen zb.

    Und dann auch noch auf einen so sonderbaren Framework wie Android.
    Wie ich schon am Anfang sagte halte ich deinen Lösungsansatz für nicht sehr sinnvoll.
    Überdenke ihn noch mal .


    Was willst du eigentlich machen?
    wenn es eine Zeiterfassung werden soll ist eigentlich eine DatenBank das Herzstück.
    Ich würde Alle eingaben in die DB machen und diese dann abfragen und anzeigen und zwar mit ListViews.


    Wehr gibt einen der von Programmierung keine oder nur sehr wenig ahnung hat so eine Aufgabe?

    dann mache es ohne Klasse musst in den Methoden deinen Code einfügen.


    hatte leider in dem vorherigen code einen fehler .
    du brauchst gar keine Objektvariable sondern kanst gleich die Klasse nehmen.
    txt3.addTextChangedListener( new Time24hFormatValidator(getApplicationContext()));
    oder
    txt3.addTextChangedListener( new Time24hFormatValidator(this));
    wie gesagt weiß nich genau ob this oder getApplicationContext() teste mal.

    wobei ich mir nicht sicher bin ob es this ist oder getApplicationContext().
    prüfe mit dem Debugger mache einen Brackpoint auf die Methoden in deiner Klasse.


    developer.android.com/studio/debug/index.html
    stackoverflow.com/questions/32…o-debug-in-android-studio
    learnhowtoprogram.com/android/…-and-the-android-debugger

    Habe es dir doch oben als code beispiel gegeben.
    Schaue dir objektorientierte Programmierung noch mal an.
    Du Definierst zwar ein Objekt oder Variable "public Time24hFormatValidator time24;"
    aber ein Objekt wird nicht erstellt das wird in Java mit "new" gemacht dabei wird der Konstruktor aufgerufen wenn er nicht überladen ist wird der Standart Konstucktor aufgerufen "Time24hFormatValidator time24()"
    du Hast ihn überladen und willst eigentlich das dieser aufgerufen wird


    "public Time24hFormatValidator(MainActivity Zeiterfassung) {
    ze = Zeiterfassung;
    }"


    dies würdest du mit


    public Time24hFormatValidator time24;
    time24 = new Time24hFormatValidator(this ) ;




    machen.

    Hi auch bei deinen "tw" Übergiebst du keinen Context. Prüfe mit dem Debugger ob die "ze" Variable in der Kasse einen Wert hat .
    werden diese zeilen überhaupt aufgerufen?
    public newRowTextWatcher(MainActivity Zeiterfassung)
    { ze = Zeiterfassung; }


    auch hast du die reien folge nicht so wie ich es in Post Nr.6 angedeutet habe.


    Warum eigentlich ein neues Layout mache doch deine View Elemente sichtbar und unsichtbar im Layout so wie du es brauchst.


    (am besten keine über Java erstellten Buttons (da das meiner Meinung nach schwerer zu machen ist))


    Wass soll das, dann hast du es noch nicht verststanden. Buttons müssen immer in Java bekannt gemacht werden auch wenn du die onClick eigenschaft in XML nutzt. Dies muss aber in der onCreate gemacht werden, da dort auch das Layout geladen wird, werden auch die onClicklistner gesetzt, die Button machtst du java dort auch bekannt.
    Du Lädst arber ein neues Layout auserhalb der onCreate und musst somit selber den OnCklickListner setzen.
    Du kanst die default Klickmethode "onClick(View v)" benutzen, durch angabe von this in
    ".setOnClickListener(this);"
    oder eine eigene Methode schreiben die du bei this eintragen musst.
    Ist eigentlich nicht schwer und auch nicht so viel Tipparbeit.


    Ps. so jetzt sollte das Thema aber auch durch sein.

    Verstehe den ganzen Aufwand nicht. Wieso erstellst du die Variablen die du in allen activitys brauchst nicht in eine Klasse macht sie static und erstellst die Variablen auch static in der Klasse. Somit kannst du von allen activitys ohne Instanz darauf zugreifen. Natürlich must du den Klassen nahmen mit angeben. Wenn du den kurz wählt ist das auch nicht so viel tipparbeit

    Also du hast zwar in deiner neuen Klasse einen Konstruktor dem der context der activity übergeben werden soll.,den rufst du aber nicht auf. Somit hast du auch nicht den context und auch keinen Bezug zu der edit Text Variablen aus der Main .


    Müsste in etwa so aussehen
    txt3.addTextChangedListener(new time24(this));
    also den bezug zu deiner MainActivity.

    Zeige mal deine newRowTextWatcher Klasse Methode oder was das ist.
    Mal was anderes du willst doch bestimmt auch deine Daten Speichen und vielleicht später wieder anzeigen. Wie hast du dir das gedacht? Denn das ist ja alles nur solange gültig wie die app läuft beim beenden ist alles weg.

    in diesen link ist es nicht so
    gist.github.com/anonymous/a0e3f50f60bfcd8b27144ba40106342d


    T1 tw
    T2 tw
    T3 time24
    T4 time24
    T5 tw
    .
    .
    Bin nur am Handy da ist das tippen umständlich.
    Wie gesagt ohne Instanz initialisieren der Kasse wird es nicht gehen.
    Schicke mir mal etwas zu newRowTextWatcher, TextWatcher
    Kenne ich nicht habe damit noch nicht gearbeitet.

    Könnte es sein, dass wegen tw time24 immer leere Zeilen vorfindet?
    kann sein habe es nicht geprüft.


    meiner Meinung nach müsstest du erst prüfen und dann erst setzen mit txt3.addTextChangedListener(tw);


    wird denn die Prüfrutiene denn Überhaupt aufgerufen denn von der neuen Klasse hast du keine Instanz


    Wie gesagt kenne ich newRowTextWatcher nicht weiß nicht was da gemacht wird . Diese lib ist mir nicht bekannt.

    hallo, ich würde das etwas anders machen für die Anzeige würde ich eine listview besser eine custen listview benutzen.
    Die Daten wurde ich in eine sqlite speichern.


    Was ist newRowTextWatcher tw und Time24hFormatValidator time24;
    Kenne ich leider nicht.



    txt3.addTextChangedListener(time24);

    wieso machst du voher das txt3.addTextChangedListener(tw); eins von beiden solte genügen.

    Ich sehe keine instanz von time24 meine sowas wie
    Time24hFormatValidator time24 = new Time24hFormatValidator ();





    verstehe auch nicht was
    EditText txt4 = (EditText) ze.lastRow.getChildAt(1);
    in der Zeiterfassung 3 soll. wenn du auf den Edittext in der Main zugreifen willst wieso erstellst du eine neue Variable.
    mache die ganze Prüfung auf richtige Urzeit in der main und gieb dann erst weiter wen die eingabe gültig war.
    also gleich nach "EditText txt3 = new EditText(MainActivity.this);" prüfen





    nein wo ist die variable des Button und wo setzt du den onklicklistner. Vor allen erst nach dem du das layout geladen hast. Nach dem laden sind alle alten Button vor dem inflate weg.


    Wie machst du das mit der onClick Methode? Benutzt du das onCkick in XML, und für jeden Button eine Methode . Das wird mit mehren Layouts nicht gehen.


    in den assets kannst du nichts speichern.
    Du erstellst zwar eine URL nur wo ist die Internet Adresse?


    https://www.google.de/url?sa=t…Vaw2JUGseAby57rDhouh4xLem


    Ich würde es nicht auf der SD Karte sondern im App Speicher speichern.
    Denn ab API 23 ist es nicht mehr so einfach mit den Premission für den externnen Speicher.
    die Internet Premission ist geblieben.



    Ps. Ok habe gesehen das du eine Adresse in einer Variablen hast.
    Das abstürtzen wird wohl daran liegen das du auf den Externen Speicher schreiben willst und nicht die berechtigung hast.
    Denn die haben sich seit API 23 geändert.
    Auserdem soltest du es in einen extra Thread machen so wie im Video.


    developer.android.com/training/permissions/requesting.html


    Wozu brachst du den Assets Ordner?
    Prüfe am Anfang ob die aktuellste Datei schon geladen ist, wenn ja dann öffne diese , wenn nicht lade die neue Version runter.
    Lösche die alte Datei oder überschreibe sie.
    Wenn keine Datei da ist beim ersten Start der App lade sie herunter. Die Assets brauchst du nicht mehr.


    Ziehe die Möglichkeit inbetracht das wenn keine Internetverbindung da ist du die schon geladene Datei laden kannst.
    Dateiname vielleicht in den Sharedpreferences speichern denn der ändert sich bei deinen Code bei jeden Download.