App schließt beim Klick auf Back (anstatt zur ersten Activity zurück zu gehen)

  • Antworten:6
  • Bentwortet
Mirco
  • Forum-Beiträge: 13

16.02.2011, 19:02:09 via Website

Hallo Leute,

mal wieder ich, sorry ;-).

Ich habe mehrere Activitys, unter anderem eine PreferenceActivity. Diese rufe ich mittels:

1@Override
2 public boolean onOptionsItemSelected(MenuItem item) {
3
4 switch (item.getItemId()) {
5 case R.id.mnuAdd:
6 Intent textEdit = new Intent(getApplicationContext(),TextEditor.class);
7 startActivityForResult(textEdit, ADD_NOTE);
8 break;
9 case R.id.mnuPreferences:
10 Intent prefActivity = new Intent(this,Preferences.class);
11 startActivityForResult(prefActivity,CHANGE_PREFERENCES);
12 case R.id.mnuExit:
13 finish();
14 default:
15
16 break;
17 }
18 return super.onOptionsItemSelected(item);
19 }

auf. In der PrefActivity behandle zwar das KeyboardEvent, allerdings liegt es nicht daran (schon auskommentiert).

Im onActivityResult mache ich zwar auch was, hat aber auch keine Auswirkungen (auch auskommentiert)...

Woran liegts?

Folgende Erfahrung habe ich gemacht (bei 3 Activitys...1. ListActivity, 2. MenuEditor Activity 3. Pref Activity).

Wenn ich aus Activity 1 direkt die PrefAct aufrufe, schließt sich die App beim zurück gehen. Rufe ich aus Activity erst den Editor auf und von da aus die PrefAct komme ich beim Klick auf Zurück zur 1. Activity wieder zurück...


Weiß jemand Rat?

Antworten
Andy N.
  • Forum-Beiträge: 3.112

16.02.2011, 19:55:09 via Website

Du verwendest startActivityForResult...
Hast Du dann in Deinem Einstellungen auch ein setResult(...) bzw. ein darauf folgendes finish() die aufgerufen wird, wenn die Activity beenden wird?

— geändert am 16.02.2011, 19:56:16

Antworten
Mirco
  • Forum-Beiträge: 13

16.02.2011, 19:58:00 via Website

Hy,

also in meiner Activity sieht es so aus:

1public boolean onKeyDown(int keyCode, KeyEvent event) {
2
3 if(keyCode == KeyEvent.KEYCODE_BACK){
4 setResult(RESULT_OK);
5 }
6 return super.onKeyDown(keyCode, event);
7
8
9 }

Im Prinzip weiß ich gar nicht mehr, warum ich es so gemacht habe, kann die Funktion, die die Einstellungen übernimmt, ja auch nach startActivity(prefActivity) (dann ohne result) aufrufen.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

16.02.2011, 20:18:14 via Website


09 case R.id.mnuPreferences:
10 Intent prefActivity = new Intent(this,Preferences.class);
11 startActivityForResult(prefActivity,CHANGE_PREFERENCES);
12 case R.id.mnuExit:
13 finish();

Da fehlt ein "break" vor Zeile 12.

Antworten
Andy N.
  • Forum-Beiträge: 3.112

16.02.2011, 20:21:59 via Website

Das mit dem Break wollte ich auch grad schreiben... der springt ins case R.id.mnuExit:

Aber warum willst Du die Werte von der Pref zurück schicken? Eigentlich kannst Du ja immer auf die zurückgreifen.
(bzw. Du sendet ja auch keine Werte zurück)

— geändert am 16.02.2011, 20:23:19

Antworten
Mirco
  • Forum-Beiträge: 13

16.02.2011, 20:23:03 via Website

BÄM, das war's ;-). Vielen Dank...warum kommt denn da keine Fehlermeldung?

Antworten
Andy N.
  • Forum-Beiträge: 3.112

16.02.2011, 20:25:18 via Website

weil es Fälle gibt wo man verschiedene case zusammen legen kann

case 1:
case 2:
machdas();
break;

Und selbst
case 1:
machdies();
case 2:
machdas()
break;
könnte Sinn machen.

— geändert am 16.02.2011, 20:26:13

Antworten