Kann man in einer Activity verhindern, daß zurücknavigiert wird?

J

jowu

Neues Mitglied
0
Hallo zusammen,

ich bin gerade beim Basteln einer Activity, wo Datensätze bearbeitet werden (Kundenstammsätze). Die Activity wird von einer Master-Activity über den Klick auf einen Eintrag in einer Listview aufgerufen.Sie bekommt einen Intent mit der Kundennummer mit, im Ereignis onLoad werden die Daten aus der Datenbank gezogen und die Felder mit setText() usw. befüllt

Es gibt in der Einzel-Activity einen Anzeige- und einen Bearbeitungsmodus, wo die EditText und Spinner entweder enabled oder nicht sind. Wenn man sich im Editiermodus befindet, kann man entweder einen Button "Speichern" oder einen Button "Abbrechen" betätigen. Man muß dann erst einen Abfragedialog mit "Ja" bestätigen und dann kommt man wieder in den Anzeigemodus. Also ganz klassisch.

Der Haken bei der Sache ist, daß man im Editiermodus sein kann und bereits viel eingegeben haben kann und dann auf dem Standard Zurück-Button kommt. Dann fliegt man aus der Activity raus und die erfassten Daten sind weg. Kann man das verhindern oder wie designt man so etwas richtig?

Grüße
Johannes
 
Hallo Johannes,

einfach onBackPressed überschreiben
 
  • Danke
Reaktionen: jowu
Hallo jowu,

ich schließe mich swa00 an. Jedoch genügt das nicht, denn es muss der Aufruf von super.onBackPressed verhindert werden. Daher solltes du dir ein Flag setzen wenn du im Edit Modus bis und diese Flag in onBackPressed abfragen. Sonnst kannst du die APP nämlich nicht mehr beenden.

Grüße
 
.... Sonnst kannst du die APP nämlich nicht mehr beenden.

Wieso sollte er nicht nach Bedarf ein finish(), resp. Sytem.exit(0) ausführen können ?
 
swa00 schrieb:
.... Sonnst kannst du die APP nämlich nicht mehr beenden.

Wieso sollte er nicht nach Bedarf ein finish(), resp. Sytem.exit(0) ausführen können ?

Ich meinte natürlich, dass er es dann nicht mit dem BackButton beenden kann. :biggrin:

Grüße
 
Aber er wollte auch das nicht direkt beendet wird.
Hier mal ein Beispiel wie ich es am Anfang meiner Programmierung gemacht habe bei einem Taschenrechner:) Es sollte erst beim zweitenmal betätigen beendet werden.
Sicherlich nicht das beste Beispiel aber immerhin ein bisschen, um zu verstehen wie das mit dem onBackPressed funktoniert.

Code:
@Override
    public void onBackPressed() {
       
        if (zweimalBackzumverlasseneinmalgedrückt) {
         
            Anwendungnichtgeschlossen = false; //Wenn das zweite mal gedrückt dann Anwendung schließen
            super.onBackPressed();
            return;
        }
        zweimalBackzumverlasseneinmalgedrückt = true; //beim ersten mal Drücken Variable auf True
       
        new Thread () { //neuen Thread starten um Infomeldung anzuzeigen
            @Override
            public void run()
            {
                try
                {
                    Thread.sleep(500); // 0,5 Sekunden Warten
                }
                catch (InterruptedException e)
                {
                    //showToast("Kein Sleep");
                }
                if(Anwendungnichtgeschlossen) //nach 0,5 Sekunden Prüfen ob schon beendet wurde. Wenn nicht dann Info anzeigen
                showToast("Taste Zurück zweimal betätigen um den Taschenrechner zu beenden");
            }
           
           
        }.start();
       
        Timer t = new Timer();
        t.schedule(new TimerTask() {

            @Override
            public void run() {
                zweimalBackzumverlasseneinmalgedrückt = false; // Nach einer Sekunde eine Betätigung wieder Zurück setzten
            }
        }, 1000);

    }
 
@123
auch ne idee :)
 
@123thomas

Die zwei Thread( Timer und Thread) sind nicht so prickeln. Du solltest die auch vernünftig beenden (MemoryLeak).

Besser wäre es, onBackPressed zu überschreiben. Schön wäre dann noch ein Dialog, der fragt, ob die Activity beendet werden soll.
 
  • Danke
Reaktionen: 123thomas
Ja das stimmt, dass war meine aller erste mini App :bored:
 
Nonsens schrieb:
Hallo jowu,

ich schließe mich swa00 an. Jedoch genügt das nicht, denn es muss der Aufruf von super.onBackPressed verhindert werden. Daher solltes du dir ein Flag setzen wenn du im Edit Modus bis und diese Flag in onBackPressed abfragen. Sonnst kannst du die APP nämlich nicht mehr beenden.

Grüße

Das ist durchaus im Sinne des Erfinders, daß man im Editiermodus nicht rausfliegen können soll. Ich würde das dann so schreiben:

@override
public void onBackPressed()
{
if ( !editiermodus )
{
super.onBackPressed();
}
}
 
Passt :)

Manche interpretieren halt etwas Anderes in die Fragestellung
 
@override
public void onBackPressed()
{
if ( !editiermodus )
{
super.onBackPressed();
}
}[/QUOTE]

Ich würde das umkehren, das ist für zusätzliche Filter offen:
public void onBackPressed()
{
if ( editiermodus ) { return; }

super.onBackPressed();

}

Grüße
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
10
Aufrufe
230
swa00
swa00
D
Antworten
14
Aufrufe
1.716
chrs267
chrs267
D
  • Data2006
Antworten
14
Aufrufe
487
jogimuc
J
Zurück
Oben Unten