in Zeile 56 des Textwatchers kommt der Fatal Error, also denk ich mal, dass es diese sein wird
editText durch zwei Textwatcher untersuchen lassen
-
-
und was ist den aktueller Code
-
MainActivity
Java
Alles anzeigenpackage com.example.cris.zeiterfassungv2; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; import android.view.inputmethod.EditorInfo; import android.widget.EditText; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.Toast; public class MainActivity extends AppCompatActivity { public TableRow lastRow; public newRowTextWatcher tw;{ tw= new newRowTextWatcher(this);} public Sum sum;{ sum= new Sum(this);} /* public Time24hFormatValidator time24;{ time24 = new Time24hFormatValidator(this );}*/ public void AddRow() { TableRow row = new TableRow(MainActivity.this); EditText txt1 = new EditText(MainActivity.this); EditText txt2 = new EditText(MainActivity.this); EditText txt3 = new EditText(MainActivity.this); EditText txt4 = new EditText(MainActivity.this); EditText txt5 = new EditText(MainActivity.this); EditText txt6 = new EditText(MainActivity.this); EditText txt7 = new EditText(MainActivity.this); row.addView(txt1); row.addView(txt2); row.addView(txt3); row.addView(txt4); row.addView(txt5); row.addView(txt6); row.addView(txt7); txt1.setBackgroundResource(R.drawable.cellshape); txt2.setBackgroundResource(R.drawable.cellshape); txt3.setBackgroundResource(R.drawable.cellshape); txt4.setBackgroundResource(R.drawable.cellshape); txt5.setBackgroundResource(R.drawable.cellshape); txt6.setBackgroundResource(R.drawable.cellshape); txt7.setBackgroundResource(R.drawable.cellshape); txt1.setInputType(InputType.TYPE_CLASS_TEXT); txt2.setInputType(InputType.TYPE_CLASS_TEXT); txt3.setInputType(InputType.TYPE_DATETIME_VARIATION_TIME); txt4.setInputType(InputType.TYPE_DATETIME_VARIATION_TIME); txt5.setInputType(InputType.TYPE_CLASS_NUMBER); txt6.setInputType(InputType.TYPE_CLASS_TEXT); txt7.setInputType(InputType.TYPE_CLASS_TEXT); txt1.addTextChangedListener(tw); txt2.addTextChangedListener(tw); txt3.addTextChangedListener(tw); txt4.addTextChangedListener(tw); txt5.addTextChangedListener(tw); txt6.addTextChangedListener(tw); txt7.addTextChangedListener(tw); /* txt3.addTextChangedListener(new Time24hFormatValidator(this)); txt4.addTextChangedListener(new Time24hFormatValidator(this));*/ /* txt3.addTextChangedListener(time24); txt4.addTextChangedListener(time24);*/ TableLayout table = (TableLayout) findViewById(R.id.tabelle); table.addView(row); lastRow = row; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tw = new newRowTextWatcher(this); /* time24 = new Time24hFormatValidator(this);*/ lastRow = (TableRow) findViewById(R.id.firstRow); EditText txt1 = (EditText) findViewById(R.id.etOrderNo); EditText txt2 = (EditText) findViewById(R.id.etMachineID); EditText txt3 = (EditText) findViewById(R.id.etstarttime); EditText txt4 = (EditText) findViewById(R.id.etendtime); EditText txt5 = (EditText) findViewById(R.id.etdecimaltime); EditText txt6 = (EditText) findViewById(R.id.etrework); EditText txt7 = (EditText) findViewById(R.id.etstatus); /* txt3.addTextChangedListener(new Time24hFormatValidator(this)); txt4.addTextChangedListener(new Time24hFormatValidator(this));*/ /* txt3.addTextChangedListener(time24); txt4.addTextChangedListener(time24); */ txt1.addTextChangedListener(tw); txt2.addTextChangedListener(tw); txt3.addTextChangedListener(tw); txt4.addTextChangedListener(tw); txt5.addTextChangedListener(tw); txt6.addTextChangedListener(tw); txt7.addTextChangedListener(tw); /* txt3.addTextChangedListener(sum); txt4.addTextChangedListener(sum); txt5.addTextChangedListener(sum);*/ } }
NewRowTextWatcher tw
Java
Alles anzeigenpackage com.example.cris.zeiterfassungv2; import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; import android.widget.Toast; public class newRowTextWatcher implements TextWatcher { MainActivity ze; public newRowTextWatcher(MainActivity Zeiterfassung) { ze = Zeiterfassung; } @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { EditText txt1 = (EditText) ze.lastRow.getChildAt(0); EditText txt2 = (EditText) ze.lastRow.getChildAt(1); EditText txt3 = (EditText) ze.lastRow.getChildAt(2); EditText txt4 = (EditText) ze.lastRow.getChildAt(3); EditText txt5 = (EditText) ze.lastRow.getChildAt(4); EditText txt6 = (EditText) ze.lastRow.getChildAt(5); EditText txt7 = (EditText) ze.lastRow.getChildAt(6); if (txt1.getText().toString().equals("") && txt2.getText().toString().equals("") && txt3.getText().toString().equals("") && txt4.getText().toString().equals("") && txt5.getText().toString().equals("") && txt6.getText().toString().equals("") && txt7.getText().toString().equals("")) { return; } else{ String str1 = txt3.getText().toString(); String str2 = txt4.getText().toString(); if(!str1.equals("")) { String[] parts = str1.split(".\\[0-9]"); String part1 = parts[0]; String part2 = parts[1]; int hours = Integer.parseInt(part1); int minutes= Integer.parseInt(part2); if (hours>=0 && hours<=23) { return; } else { txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); } if (minutes>=0 && minutes<60) { return; } else { txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); } } if(!str2.equals("")) { String[] parts = str2.split(".\\[0-9]"); String part3 = parts[0]; String part4 = parts[1]; int hours = Integer.parseInt(part3); int minutes= Integer.parseInt(part4); if (hours>=0 && hours<=23) { return; } else { txt4.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); } if (minutes>=0 && minutes<60) { return; } else { txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); } } //ze.AddRow(); }}}
Der Rest ist wie gehabt -
klicke bitte die Zeilen Nummern dazu
-
dies führ im Moment zu keinem Ergebnis du versteht nicht was ich meine und machst auch nicht was ich sage werde es mir später mal anschauen.
-
klicke bitte die Zeilen Nummern dazu
bei mir wird die Zeilennummer 56 auch so angezeigt, deshalb versteh ich nicht so ganz, was du meinst
aber es ist das hier: String part2 = parts[1];
-
Bei mir zeigt es keine Zeilen Nummern an. Kann auch an meinem Handy liegen.
-
prüfe mit dem debuggen ob es wirklich in der Zeile 56 abbricht.
-
jap, weil er die 1 noch für
String part1 = parts[0];
erkennt, aber halt nichts mehr hat für
String part2 = parts[1];
ich hab mal
Javaelse{ txt3.setText("17:45"); String str1 = txt3.getText().toString(); String str2 = txt4.getText().toString();
gesetzt, und dann springt er immer von txt3.setText("17:45"); zurück zuJavaif (txt1.getText().toString().equals("") && txt2.getText().toString().equals("") && txt3.getText().toString().equals("") && txt4.getText().toString().equals("") && txt5.getText().toString().equals("") && txt6.getText().toString().equals("") && txt7.getText().toString().equals(""))
also in einer dauernden Schleife
-
ich kann dir nicht folgen für mich ist heute Schluss.
-
ich meine, wenn ich im else dem txt3 einen Wert zuweise, dann geht er nicht zu
Javaif (hours>=0 && hours<=23) { return; } else { txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show();
wie es die if-Schleife eigentlich vorsieht, sondern springt immer wieder zurück zu
Javaif (txt1.getText().toString().equals("") && txt2.getText().toString().equals("") && txt3.getText().toString().equals("") && txt4.getText().toString().equals("") && txt5.getText().toString().equals("") && txt6.getText().toString().equals("") && txt7.getText().toString().equals(""))
und von daraus wieder zuJava} else{ txt3.setText("17:45"); String str1 = txt3.getText().toString(); String str2 = txt4.getText().toString();
alles klar, danke schonmal vielmals
-
So habe nun den TextWatchermal getestet. Er funktioniert anders als du es dir Denkst .
Er wird nach jeden Tastendruck aufgerufen. Nicht erst am ende der Eingabe.
zB. du willst 21:12 eingeben, da wird schon nach der ersten "2" der Watcher das erste mal aufgerufen.Der Bezug zu den Zellen geht so auch nicht
EditText txt3 = (EditText) ze.lastRow.getChildAt(3);
String str = txt3.getText().toString();
denn "str" ist in jeden durchlauf lehr.https://developer.android.com/…oid/text/TextWatcher.html
Das eingegebener Zeichen ist in "editable" die Variable die der Callback Methode mitgegeben wird.
Du müsstest auf das ende der Eingabe warten also zB. auf das drüchen der Enter Taste, mit dem der User normaler weiße seine Eingabe beendet.
Erst jetzt hast du den vollen String in der übergebenen Variablen "editable" stehen und kannst ihn auswerten.
Auf die Frage ob in der "str" string Variablen was drinn steht hast du mir leider keine Antwort gegeben.Habe den Watcher mal mit dem Debugger im Einzelschritt getestet.
Du könntes jedes eingegene Zeichen testen ob es im richtigen Bereich ist.
beim ersten durchlauf
1. 0,1,2
2. 0-9
3. :
4. 0-5
5. 0-9PS. habe gerade gemerkt das das auch nicht so richtig ist. Müsstest immer den gesamten String testen. Denn sonst könnte auch 29 Uhr entstehen.
1. 0-2
2. 0-24
3. :
4. 0-5
5. 0-9Der Aufruf aus der Main Klasse geht auch mit deiner Variante "txt3.addTextChangedListener(time24)"
Leider hast du mir auch nicht bestätigt das die Klasse und somit der Code ausgeführt. Es gehen beite Varianten deine und meine.
Wie ich schon sagte hatte ich nicht dein Projekt und war auch nicht an einen Rechner mit Android Studio . Da ist man auf die Aussagen des anderen angewiesen und wenn die nicht kommen läuft man manschmal in eine Sackgasse.Ps. Mich würde es trotzdem interessieren wer dir diese Aufgabe gegeben hat?
Viele Grüße Jörg
-
Hey, sorry dass ich ne Zeit nicht geantwortet habe.
Ich habs jetzt ein wenig anders hinbekommen, also ohne Textwatcher für die Uhrzeit, aber mit Textwatcher für die Differenz
Das ganze steht soweitjetzt nur noch zwei Sachen
1) Ich will, dass man ein Datum wählen kann und dann die Tabelle bekommt, die man an dem Tag eingetragen hat (also auf Auswahl des Datums soll die Tabelle die an diesem Tag erstellt wurde erscheinen)
Alternativ reicht auch, wenn man z.B. freitags die Tabelle von Montags nochmal aufrufen könnte
2) Möchte ich die Daten aus der Tabelle gerne speichern (lokal, oder gar in einer Datenbank)ich denke mal, 1) und 2) müssen zusammen, oder?
Meinen Code lade ich heute Abend mal hoch
MfG
DerDon
-
du solltest dich mal mit Datenbanken beschäftigten. Zum Anfang wurde ich sagen nim die in Android vorhandene sqlite. Lernne auch die Grund Begriffe von SQL.
Bei jeder Eingabe egal ob über eine edittext oder einen Dialog würde ich die Daten speichern. Oder erstmal in Variablen, Daten Struktur, Klasse.... Dies dann in die SQL Schreiben.
http://www.programmierenlernen…qlite-datenbank-tutorial/ -
Das mit dem Datum wählen würde ich sagen du machst eine DB Abfrage und zeigst das Ergebnis an.
Eingabe des Datums vielleicht über einen Dialog dort enweder ein edittext oder besser einen datepicker.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!