Hatte schon mal gefragt ob der Code auch ausgeführt wird woher weißt du das. Log Zeilen hast du ach keine in deinen Code die es dir verraen können.
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. -
Na dann noch viel Spaß Bin auf das fertige Produkt gespannt.
-
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?
-
Wo und in wecher Sprache Programmierst du den sonst?
-
dann mache es ohne Klasse musst in den Methoden deinen Code einfügen.
Java
Alles anzeigentxt3.addTextChangedListener(new TextWatcher() @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } });
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-debuggerJava
Alles anzeigenpublic class Time24hFormatValidator implements TextWatcher { Context ze; public Time24hFormatValidator(Context Zeiterfassung) { ze = Zeiterfassung; } // aufruf aus der Main // denke ich so txt1.addTextChangedListener(tw); txt2.addTextChangedListener(tw); txt3.addTextChangedListener(time24(this)); //oder txt3.addTextChangedListener(time24(getApplicationContext())); // oder mit new txt3.addTextChangedListener( new time24(getApplicationContext())); txt4.addTextChangedListener(tw); txt5.addTextChangedListener(tw); txt6.addTextChangedListener(tw); txt7.addTextChangedListener(tw);
-
Ja das stimmt man kann das gesamte Layout Programatisch in Java erstellen. Viel Arbeit.
-
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.
-
ja sie werden angelegt aber meiner meinung nach wird der Code deiner Klasse gar nicht ausgeführt.
PS. das mit dem Context trifft auch auf deine tw Klasse zu.
-
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.
Java
Alles anzeigenpublic class Time24hFormatValidator implements TextWatcher { Context ze; public Time24hFormatValidator(Context Zeiterfassung) { ze = Zeiterfassung; } // aufruf aus der Main // denke ich so txt1.addTextChangedListener(tw); txt2.addTextChangedListener(tw); txt3.addTextChangedListener(time24(this)); //oder txt3.addTextChangedListener(time24(getApplicationContext())); // oder mit new txt3.addTextChangedListener( new time24(getApplicationContext())); txt4.addTextChangedListener(tw); txt5.addTextChangedListener(tw); txt6.addTextChangedListener(tw); txt7.addTextChangedListener(tw);
-
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/a0e3f50f60bfcd8b27144ba40106342dT1 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.