Methode von ActivityA beim Schließen von ActivityB starten?

  • Antworten:14
  • OffenNicht stickyBentwortet

20.05.2011 21:35:17

Hi,

ich lese in meiner MainActivity den Inhalt einer Datenbank wie folgt in einen Spinner ein:
1public void readIntoSpinner()
2 {
3 try {
4 myDB = this.openOrCreateDatabase(MY_DB_NAME, MODE_PRIVATE, null);
5 Cursor myCursor = myDB.rawQuery("SELECT _id, provider FROM " + MY_DB_TABLE + ";", null);
6 startManagingCursor(myCursor);
7
8 Spinner Spinner = (Spinner)findViewById(R.id.spinner);
9 myCursor.moveToFirst();
10
11 SimpleCursorAdapter spinadapter = new SimpleCursorAdapter(
12 this,
13 android.R.layout.simple_spinner_item,
14 myCursor,
15 new String[] { "provider" },
16 new int[] {android.R.id.text1});
17
18 spinadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
19 Spinner.setAdapter(spinadapter);
20
21 Spinner.setPrompt(this.getResources().getString(R.string.provider));
22 Spinner.setAdapter(spinadapter);
23 } finally {
24
25 if (myDB != null)
26 myDB.close();
27 }
28 }

Nun möchte ich nach dem Ändern von Datensätzen in einer SubActivity (durch einen Button) die SubActiviy schließen (wie ist klar) und dabei diese Methode der MeinActivity ausführen.
Jetzt ist meine Frage, wie lässt sich das am einfachsten lösen?

Danke schonmal

20.05.2011 22:25:11

Die Methode einfach in die onCreate Methode setzten!!

wenn ich dich richtig verstanden habe.

1@Override
2public void onCreate(....) {
3super.onCreate(...);
4setContentView(....);
5readIntoSpinner();

"Hard work beats talent, when talent fails to work hard"

21.05.2011 10:51:50

Die Implementierung von onActivityResult() benutzt man soweit ich das gelesen und verstanden habe eigentlich nur dann, wenn man von der Activity ein Resultat erwartet und auswerten möchte. Allerdings muss dann die Activity von der man zurückkehrt auch mit : startActivityForResult() aufgerufen worden sein und nicht mit dem einfacheren startActivity().

Das ist in der oben verlinkten Erklärung zum Activity LifeCycle prima mit Code-Beispiel erklärt.

Letztlich muss natürlich jeder selber wissen wie seine Activitys steuert und untereinander aufruft.

lg Voss - Ach ja und noch was, die AndroidPIT-Regeln ლ(╹◡╹ლ) Android Security

Gelöschter Account

22.05.2011 08:40:01

Der OP hat leider nicht mitgeteilt wie er seine Sub-Activity startet. Sobald ich das Wort Sub-Activity lese impliziere ich aber immer genau ein solches Szenario.

Ein Returnwert ist eigentlich nicht notwendig. Sobald eine Sub-Activity mit startActivityForResult() gestartet wurde läuft die Root-Activity nach dem Beenden der Sub-Activity automatisch durch onActivityResult(). Was man dort prüft ist jedem selbst überlassen. Aber man hat immerhin die Möglichkeit festzustellen a.) was beendet wurde und b.) welchen Returnwert es gibt - muss man aber nicht ;-)

Wenn OP hingegen mit startActivity() startet würde ich onResume() nehmen. In diesem Fall würde ich readIntoSpinner() in onResume() aufrufen und gleichzeitig aus onCreate() löschen - die Routine wird sonst beim ersten Start zweimal ausgeführt

Gruß
Harald

— geändert am 22.05.2011 08:41:19

22.05.2011 15:24:58

Die "SubActivity" wird ganz simpel über
1startActivity(new Intent(this, PrefActivity.class));
gestartet.

Ich hab das jetzt mal mit onRestart() ausprobiert:
1@Override
2 public void onRestart(){
3 readIntoSpinner();
4 }
Aber leider bekomme ich da einen FC:
105-22 13:21:48.046: ERROR/AndroidRuntime(369): Uncaught handler: thread main exiting due to uncaught exception
205-22 13:21:48.082: ERROR/AndroidRuntime(369): java.lang.RuntimeException: Unable to resume activity {luhu.wort.verdreher/luhu.wort.verdreher.Wortverdreher}: android.app.SuperNotCalledException: Activity {luhu.wort.verdreher/luhu.wort.verdreher.Wortverdreher} did not call through to super.onRestart()
305-22 13:21:48.082: ERROR/AndroidRuntime(369): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2950)
405-22 13:21:48.082: ERROR/AndroidRuntime(369): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2965)
505-22 13:21:48.082: ERROR/AndroidRuntime(369): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1889)
605-22 13:21:48.082: ERROR/AndroidRuntime(369): at android.os.Handler.dispatchMessage(Handler.java:99)
705-22 13:21:48.082: ERROR/AndroidRuntime(369): at android.os.Looper.loop(Looper.java:123)
805-22 13:21:48.082: ERROR/AndroidRuntime(369): at android.app.ActivityThread.main(ActivityThread.java:4363)
905-22 13:21:48.082: ERROR/AndroidRuntime(369): at java.lang.reflect.Method.invokeNative(Native Method)
1005-22 13:21:48.082: ERROR/AndroidRuntime(369): at java.lang.reflect.Method.invoke(Method.java:521)
1105-22 13:21:48.082: ERROR/AndroidRuntime(369): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
1205-22 13:21:48.082: ERROR/AndroidRuntime(369): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
1305-22 13:21:48.082: ERROR/AndroidRuntime(369): at dalvik.system.NativeStart.main(Native Method)
1405-22 13:21:48.082: ERROR/AndroidRuntime(369): Caused by: android.app.SuperNotCalledException: Activity {luhu.wort.verdreher/luhu.wort.verdreher.Wortverdreher} did not call through to super.onRestart()
1505-22 13:21:48.082: ERROR/AndroidRuntime(369): at android.app.Activity.performRestart(Activity.java:3747)
1605-22 13:21:48.082: ERROR/AndroidRuntime(369): at android.app.Activity.performResume(Activity.java:3756)
1705-22 13:21:48.082: ERROR/AndroidRuntime(369): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2937)
Aber was bedeutet das "did not call through to super.onRestart()"?