Hallo zusammen
Im Internet (insbesondere bei StackOverflow) findet man dazu wieder mal lles mögliche - nur scheint davon irgendwie nix zu funktionieren.
Es geht um um einen Konfigurations-Screen (im Backend mit Kennwortschutz) mit 8 Textfeldern. Da dort lange und komplizierte Sachen reinmüssen, habe ich ein QR-Code-Bibliothek zu Hilfe genommen. Dann kann man die langen Werte auf irgendeiner QR-Code-Webseite eintragen und dann das QR-Code-Bild darauf generieren. Das kann man dann wiederum auf der Konfig-Seite (jedes Textfeld dort hat nen quadratischen Button auf der rechten Seite mit dem Text "QR" drauf)
Die Konfig-Seite heisst "SettingsActivity", die Seite wo der QR-Code-Reader aktiv wird (Bild der Kamera, welches erhalten bleibt bis ein QR-Code erkannt wird - anderenfalls kann man auch den (Hardware)-Back-Button der Android-Geräte verwenden falls man wieder zurück möchte - aus welchem Grund auch immer.
Die QR-Code-Erkennungs-Seite heisst "ScanActivity"...
Nun habe ich auf der Konfig-Seite für jeden "QR"-Code-Button-Klick es so gemacht, dass dabei die ID des neben dran liegenden Textfelds mit gegeben wird:
(Aber jetzt bitte nicht Sachen wie `ScanActivity.setPreviousActivity(mActivity)` thematisieren - da läuft nämlich auf das (u.A.) GENAU GLEICHE hinaus wie ScanActivity.class...)
In der "ScanActivity" geht's dann so:
(Und nun sollte auch klar werden, für was `ScanActivity.setPreviousActivity(mActivity)` war... ;-))
ScanActivityHandler.java sieht aktuell so aus:
Und das wird dann auf der Konfig-Seite wieder ausgewertet:
Funktioniert soweit "wie am Schnürchen", ist aber nicht Android-Standard. (Zugegeben hasse ich solches Framework-Zeugs quasi "wie die Pest", ich interessiere mich eher für Algorithmen, also quasi Programmieren auf rein logisch-mathematischer Ebene. Also so Zeugs was direkt "vom Kopf in den Computer" reingeht, wenn ihr versteht was ich meine. ;-))
Also bei StackOverflow findet man dazu alles Mögliche:
- "Extras" hinzufügen über den "Intent" wenn man zurück will zur vorherigen Activity
- Diese "Extras" in der onCreate(...) ODER onActivityResult(...) abfangen. (WTF, was nun von beidem?!?)
- Bei der startActivity(...) zusätzlich einen int mitgeben, damit der in der onActivityResult(...) bei der Ziel-Activity abgefangen und demnach unterschieden werden kann. -> NIX GEHT: onActivityResult(...) wird überhauopt nie aufgerufen damit - ob nun mit oder ohne zusätzlichen int!!!
Das die onCreate(...) aufgerufen wird, ist eh klar. Deshalb meine Lösung des Problems.
Ich bin ehrlich gesagt nur noch verwirrt...!!
Meine "Lösung" ist wenigstens logisch nachvollziehbar, ganz im Ggs. zum Android-Kram.
Aber kann mir vielleicht doch noch jemand sagen, wie man es Android-Kram-konform macht...? ;-)
Im Internet (insbesondere bei StackOverflow) findet man dazu wieder mal lles mögliche - nur scheint davon irgendwie nix zu funktionieren.
Es geht um um einen Konfigurations-Screen (im Backend mit Kennwortschutz) mit 8 Textfeldern. Da dort lange und komplizierte Sachen reinmüssen, habe ich ein QR-Code-Bibliothek zu Hilfe genommen. Dann kann man die langen Werte auf irgendeiner QR-Code-Webseite eintragen und dann das QR-Code-Bild darauf generieren. Das kann man dann wiederum auf der Konfig-Seite (jedes Textfeld dort hat nen quadratischen Button auf der rechten Seite mit dem Text "QR" drauf)
Die Konfig-Seite heisst "SettingsActivity", die Seite wo der QR-Code-Reader aktiv wird (Bild der Kamera, welches erhalten bleibt bis ein QR-Code erkannt wird - anderenfalls kann man auch den (Hardware)-Back-Button der Android-Geräte verwenden falls man wieder zurück möchte - aus welchem Grund auch immer.
Die QR-Code-Erkennungs-Seite heisst "ScanActivity"...
Nun habe ich auf der Konfig-Seite für jeden "QR"-Code-Button-Klick es so gemacht, dass dabei die ID des neben dran liegenden Textfelds mit gegeben wird:
Code:
private static volatile TextView mCurrentFieldForQRCodeReader = null;
public TextView getCurrentFieldForQRCodeReader()
{
return mCurrentFieldForQRCodeReader;
}
public void buttonQrAffiliateKey_click(final TextView caView)
{
SettingsActivity.mCurrentFieldForQRCodeReader = caView;
final Intent clIntent = new Intent(this.mActivity.getApplicationContext(), ScanActivity.setPreviousActivity(mActivity));
this.startActivity(clIntent);
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
findViewById(R.id.activitySettingsButtonQrAffiliateKey).setOnClickListener(caView -> buttonQrAffiliateKey_click(findViewById(R.id.activitySettingsTextFieldAffiliateKey)));
...
...
...
}
(Aber jetzt bitte nicht Sachen wie `ScanActivity.setPreviousActivity(mActivity)` thematisieren - da läuft nämlich auf das (u.A.) GENAU GLEICHE hinaus wie ScanActivity.class...)
In der "ScanActivity" geht's dann so:
Code:
private ScanCallback callback = new ScanCallback() {
@Override
public void onScanResult(String content) {
final TextView clTextView = ((SettingsActivity)mPreviousActivity).getCurrentFieldForQRCodeReader();
ScanActivityHandler.setTextFieldId(clTextView.getId());
ScanActivityHandler.setTextFieldValue(content);
final Intent clIntent = new Intent(mActivity.getApplicationContext(), SettingsActivity.setPreviousActivity(mActivity));
mActivity.startActivity(clIntent);
}
};
(Und nun sollte auch klar werden, für was `ScanActivity.setPreviousActivity(mActivity)` war... ;-))
ScanActivityHandler.java sieht aktuell so aus:
Code:
public abstract class ScanActivityHandler {
private static volatile int mTextFieldId = 0;
private static volatile String mTextFieldValue = null;
private ScanActivityHandler()
{
super();
}
static
{
}
public static int getTextFieldId()
{
return ScanActivityHandler.mTextFieldId;
}
public static String getTextFieldValue()
{
return ScanActivityHandler.mTextFieldValue;
}
public static void setTextFieldId(final int caTextField)
{
ScanActivityHandler.mTextFieldId = caTextField;
}
public static void setTextFieldValue(final String caTextFieldValue)
{
ScanActivityHandler.mTextFieldValue = caTextFieldValue;
}
}
Und das wird dann auf der Konfig-Seite wieder ausgewertet:
Code:
@Override
protected void onCreate(final Bundle savedInstanceState) {
...
...
...
final String clTextFieldValue = ScanActivityHandler.getTextFieldValue();
final int clTextFieldId = ScanActivityHandler.getTextFieldId();
if(!(clTextFieldValue == null || clTextFieldValue.intern() == "" || clTextFieldId == 0))
{
// AndroidDialogProxy.showAlertDialog("test", "test", mActivity);
((TextView) findViewById(clTextFieldId)).setText(clTextFieldValue);
}
}
Funktioniert soweit "wie am Schnürchen", ist aber nicht Android-Standard. (Zugegeben hasse ich solches Framework-Zeugs quasi "wie die Pest", ich interessiere mich eher für Algorithmen, also quasi Programmieren auf rein logisch-mathematischer Ebene. Also so Zeugs was direkt "vom Kopf in den Computer" reingeht, wenn ihr versteht was ich meine. ;-))
Also bei StackOverflow findet man dazu alles Mögliche:
- "Extras" hinzufügen über den "Intent" wenn man zurück will zur vorherigen Activity
- Diese "Extras" in der onCreate(...) ODER onActivityResult(...) abfangen. (WTF, was nun von beidem?!?)
- Bei der startActivity(...) zusätzlich einen int mitgeben, damit der in der onActivityResult(...) bei der Ziel-Activity abgefangen und demnach unterschieden werden kann. -> NIX GEHT: onActivityResult(...) wird überhauopt nie aufgerufen damit - ob nun mit oder ohne zusätzlichen int!!!
Das die onCreate(...) aufgerufen wird, ist eh klar. Deshalb meine Lösung des Problems.
Ich bin ehrlich gesagt nur noch verwirrt...!!
Meine "Lösung" ist wenigstens logisch nachvollziehbar, ganz im Ggs. zum Android-Kram.
Aber kann mir vielleicht doch noch jemand sagen, wie man es Android-Kram-konform macht...? ;-)
Zuletzt bearbeitet von einem Moderator: