Funtion aus anderer Activity starten

  • Antworten:10
Alexander R.
  • Forum-Beiträge: 1.148

01.12.2010, 15:52:13 via Website

Hallo,
ich habe 2 Activities:

Activity A und B.

Ist es nun möglich, dass ich aus Activity B den Befehl

1public void getData(){

aus der Activity A aufrufen kann??

Danke für eure antworten

Gruß Alexander

Antworten
Dominic Bartl
  • Forum-Beiträge: 180

01.12.2010, 16:37:26 via Website

wenns gleich nach dem starten ausgeführt werden soll kannst es per intent weitergeben

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

01.12.2010, 16:39:23 via Website

Hallo Dominik,
es soll erst bei einem Druck auf einen Button ausgelöst werden.
Dieser Button befindet sich allerdings nicht in der gleichen Activity wie der Aufruf, den ich starten möchte.

Gruß Alexander

Antworten
Gian U.
  • Forum-Beiträge: 117

01.12.2010, 17:40:52 via Website

Wenn du den Befehl in beiden Activities brauchst, würde ich eine neue Klasse für den Befehl und die benötigten Methoden schreiben, die nicht von einer Activity abhängig ist...

Mnemono - Efficient learning!

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

01.12.2010, 22:57:08 via App

Wie müsste man das dann in die Activity geben?

Gruß Alexander

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

01.12.2010, 23:18:10 via App

Ich denke mal, dass kommt auf den Befehl an.. Was willst du denn machen?
Lg Ansgar

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

02.12.2010, 00:54:29 via App

Ich habe meine "MainActivity" mit "extends MenuActivity".
Wenn ich nun im Menu auf "Aktualisieren" klicke soll er aus der "MainActivity" die Funktion "getData();" aufrufen (ListView aktualisieren)

— geändert am 02.12.2010, 00:55:03

Gruß Alexander

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

02.12.2010, 15:27:11 via App

Ok,
magst du mir den inhaltlichen Zusammenhang beschreiben? Wenn deine eine Activity geöffnet ist soll sie die ListView in der anderen Activity aktualisieren? Soll man das im Hintergrund sehen, oder wie genau soll das laufen? Du könntest sonst die Activity auch mit
1startActivityForResult(intent)
aufrufen und dann in der Activity mit
1setResult()
(oder so ähnlich) ein Ergebnis setzen, das die aufrufende ListView-Activity abfängt und dann die Methode auslöst..
Lg Ansgar
P.S. Hängt aber sicher vom Verwendungszweck ab, ich lern auch noch.. Einer der Pro's 'ne Idee? Wahrscheinlich lächerlich einfach:grin::P
Edit: Oh, ich merke grad, das ich (wie im letzten Deutschaufsatz:grin:) ziemlich am Thema vorbei geschrieben habe.. :P

— geändert am 02.12.2010, 15:30:04

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

02.12.2010, 15:50:50 via Website

Ich habe eine MainActivity

1package de.Rocky.AppWunsch;
2
3import java.io.BufferedReader;
4import java.io.InputStream;
5import java.io.InputStreamReader;
6import java.util.ArrayList;
7
8import org.apache.http.HttpEntity;
9import org.apache.http.HttpResponse;
10import org.apache.http.NameValuePair;
11import org.apache.http.client.HttpClient;
12import org.apache.http.client.entity.UrlEncodedFormEntity;
13import org.apache.http.client.methods.HttpPost;
14import org.apache.http.impl.client.DefaultHttpClient;
15import org.json.JSONArray;
16import org.json.JSONException;
17import org.json.JSONObject;
18
19import android.app.ProgressDialog;
20import android.content.Intent;
21import android.graphics.Color;
22import android.os.Bundle;
23import android.os.Handler;
24import android.os.Message;
25import android.util.Log;
26import android.widget.ArrayAdapter;
27import android.widget.ListView;
28
29public class AppWunsch extends MenuActivityMain implements Runnable {
30 private ProgressDialog pd;
31 InputStream is;
32 ArrayList<String> results = new ArrayList<String>();
33 JSONObject json_data;
34
35 /** Called when the activity is first created. */
36 @Override
37 public void onCreate(Bundle savedInstanceState) {
38 super.onCreate(savedInstanceState);
39 setContentView(R.layout.main);
40 /*Intent service = new Intent(getBaseContext(), LocalService.class);
41 startService(service);*/
42 Changelog changelog = new Changelog(this);
43 changelog.showOnFirstRun();
44 getData();
45 }
46
47 private void getData() {
48 pd = ProgressDialog.show(this, "Laden...", "Hole Daten...", true, true);
49
50 Thread thread = new Thread(this);
51 thread.start();
52 }
53
54 public void run() {
55 String result = "";
56 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
57
58 try {
59 HttpClient httpclient = new DefaultHttpClient();
60 HttpPost httppost = new HttpPost(
61 "url/zu/php/datei");
62 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
63 HttpResponse response = httpclient.execute(httppost);
64 HttpEntity entity = response.getEntity();
65 is = entity.getContent();
66 } catch (Exception e) {
67 Log.e("log_tag", "Fehler in http-Connection " + e.toString(), e);
68 }
69
70 try {
71 BufferedReader reader = new BufferedReader(new InputStreamReader(
72 is, "iso-8859-1"), 8);
73 StringBuilder sb = new StringBuilder();
74 String line = null;
75 while ((line = reader.readLine()) != null) {
76 sb.append(line + "n");
77 }
78 is.close();
79 result = sb.toString();
80 } catch (Exception e) {
81 Log.e("log_tag", "Fehler bei Result-Konvertierung " + e.toString(),
82 e);
83 }
84
85 try {
86 JSONArray jArray = new JSONArray(result);
87 for (int i = 0; i < jArray.length(); i++) {
88 json_data = jArray.getJSONObject(i);
89 results.add((String) json_data.get("id") + " "
90 + json_data.get("title") + " "
91 + json_data.get("message") + " "
92 + json_data.get("rating"));
93 }
94 } catch (JSONException e) {
95 Log.e("log_tag", "Fehler beim Daten holen " + e.toString(), e);
96 }
97 handler.sendEmptyMessage(0);
98 }
99
100 private Handler handler = new Handler() {
101 @Override
102 public void handleMessage(Message msg) {
103 pd.dismiss();
104 filllist();
105 }
106 };
107
108 protected void filllist() {
109 try {
110 ListView lv = (ListView) findViewById(R.id.lv);
111 lv.setBackgroundColor(Color.LTGRAY);
112 lv.setCacheColorHint(Color.LTGRAY);
113 lv.setAdapter(new ArrayAdapter<String>(this,
114 android.R.layout.simple_list_item_1, results));
115 } catch (Exception e) {
116 Log.e("log_tag", "Fehler bei Erstellung der Filelist "
117 + e.toString(), e);
118 }
119 }
120}

Und eine MenuActivity

1package de.Rocky.AppWunsch;
2
3import android.app.Activity;
4import android.app.AlertDialog;
5import android.content.DialogInterface;
6import android.content.Intent;
7import android.view.Menu;
8import android.view.MenuItem;
9import android.widget.Toast;
10
11public class MenuActivityMain extends Activity {
12
13 // Menu Optionen
14 private static final int MENU_AKTUALISIEREN = 0;
15 private static final int MENU_EINTRAG = 1;
16 private static final int MENU_BEENDEN = 2;
17 private static final int MENU_PREF = 3;
18
19 // Beschriftungen der Menuoptionen
20 private static final String MENU_OPTION_AKTUALISIEREN = "Aktualisieren";
21 private static final String MENU_OPTION_EINTRAG = "Neuer Eintrag";
22 private static final String MENU_OPTION_BEENDEN = "Beenden";
23 private static final String MENU_OPTION_PREF = "Einstellungen";
24
25 /* Menu Items werden erstellt */
26 public boolean onCreateOptionsMenu(Menu menu) {
27 menu.add(0, MENU_AKTUALISIEREN, 0, MENU_OPTION_AKTUALISIEREN).setIcon(
28 R.drawable.ic_menu_refresh);
29 menu.add(0, MENU_EINTRAG, 0, MENU_OPTION_EINTRAG).setIcon(
30 android.R.drawable.ic_menu_add);
31 menu.add(0, MENU_PREF, 0, MENU_OPTION_PREF).setIcon(
32 android.R.drawable.ic_menu_preferences);
33 menu.add(0, MENU_BEENDEN, 0, MENU_OPTION_BEENDEN).setIcon(
34 android.R.drawable.ic_menu_close_clear_cancel);
35 return true;
36 }
37
38 public boolean onOptionsItemSelected(MenuItem item) {
39 switch (item.getItemId()) {
40 case MENU_AKTUALISIEREN:
41 Toast.makeText(getApplicationContext(),
42 "Feature noch nicht implementiert", Toast.LENGTH_LONG)
43 .show();
44 break;
45 case MENU_EINTRAG:
46 startActivity(new Intent(this, Eintrag.class));
47 break;
48 case MENU_BEENDEN:
49 AlertDialog.Builder builder = new AlertDialog.Builder(this);
50 builder.setMessage("Möchtest du App Wunsch Beenden?").setTitle(
51 "Beenden").setCancelable(false).setPositiveButton("Ja",
52 new DialogInterface.OnClickListener() {
53 public void onClick(DialogInterface dialog, int id) {
54 System.exit(0);
55 }
56 }).setNegativeButton("Nein",
57 new DialogInterface.OnClickListener() {
58 public void onClick(DialogInterface dialog, int id) {
59 dialog.dismiss();
60 }
61 });
62 AlertDialog alert = builder.create();
63 alert.show();
64 break;
65 case MENU_PREF:
66 Intent settingsActivity = new Intent(getBaseContext(),
67 Einstellungen.class);
68 startActivity(settingsActivity);
69 break;
70 }
71 return false;
72 }
73}

Die MenuActivity kann über den "Menü-Button" aufgerufen werden und verhält sich wie ein normales Menü.
Nun möchte ich, wenn ich dort auf "Aktualisieren" klicke die Funktion "getData()" aus der MainActivity aufrufen.

Gruß Alexander

Antworten
Gelöschter Account
  • Forum-Beiträge: 281

02.12.2010, 16:28:51 via Website

Meine Oma hätte gesagt: So wat tut ein guter Junge nich...

Deine Methode getData ist eine private Objektmethode. Die kann von nirgendwo ausserhalb der definierenden Activity aufgerufen werden. Dazu müsste sie zumindest als public deklariert sein, evtl. reicht auch protected. Des weiteren ist es aber auch noch eine nicht-statische Objekt-Methode, also bräuchte der Aufrufer eine Referenz auf das konkrete Activity-Object. Müsstest du per Intent oder anders übergeben. Oder die Methode gleich statisch machen. Ist aber, objektorientiert gedacht, auch Müll. Soviel Logik gehört NICHT in eine Activity, auch wenn manch ein Lehrbuch das der Einfachheit halber so vormacht. Also lagere diesen Code in eine eigene Klasse aus, dann kannst du ihn von beliebig vielen Stellen aus aufrufen.

LG,

Thomas

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

02.12.2010, 17:06:55 via Website

Hallo Thomas,
habe bisher leider noch mit keiner Klasse gearbeitet hättest du da ein Beispiel für mich wie das aussehen müsste und wie ich das dann aufrufen kann?

Gruß Alexander

Antworten