Activity übergreifender Zugriff auf Variable

M

MBPower

Fortgeschrittenes Mitglied
11
Daten von Activity A nach B kann an mit putExtra übergeben, aber was kann man machen, wenn ich bei geöffneter Activity B ständig die Daten aus einer Variable aus Activity A ausgeben möchte.
Wie kann man Activity übergreifend Variable verwenden oder auf TextViews einer anderen Activity zugreifen?
 
hmm wieso sollst du auf eine textview in activity A zugreifen müssen?

wenn du activity B startest, ist A sowieso nicht mehr sichtbar. da kann sich also nichts ändern, somit kannst den wert einfach mit putExtra übergeben
 
Wenn ich in Activity A GPS Daten abrufe und diese in Activity B auch verwenden möchte, dann muss ich doch nicht den kompletten Code auch in Activity B verwenden, oder?
Activity A wird durch den aufruf von Activity B nicht geschlossen und empfängt weiter Daten, da muss man doch an die Daten kommen können.

In vb.net konnte man ohne Probleme auf globale variable oder auch auf textfelder einer anderen Form zugreifen. Das muss doch irgendwie auch in Java / Android funktionieren.
 
also activity A wird sicher schlafen gelegt wenn du B aufrufst. die empängt dann keine daten mehr. ( onStop wird sicher aufgerufen )
 
kann man die activity nicht in eine art globaler activity-registry (von mir aus eine liste) legen und dann auf die einzelnen elemente zugreifen?
oder bekommt man dann eine exception wenn die form im hintergrund ist?
 
ich glaub nicht, dass das gehen wird. es gibt ja den activity lifecycle und wenn eine neue activity gestartet wird, dann wird die vorherige gestoppt. deshalb wird sich auch nicht weiterarbeiten, wäre zumindest logisch so

naja wenn du einfach funktionalität von der ersten activity brauchst, lager es in eine eigene klasse aus und die kannst du auch von activity B aufrufen. eventuell liegt der fehler in der herangehensweise an das problem
 
@swordi
Ob das eigentlich so ist kann ich nicht beurteilen, aber bei mir ist es hundertprozentig nicht so.
Activity A arbeitet aber weiter, wenn ich Activity B aufgerufen habe. Es werden die Daten auch weiter verarbeitet. Das ist keine Vermutung, sondern ein Feststellung.
Ich müsste in Activity B nur Zugriff auf die Daten aus Activity A haben.
 
naja du solltest deinen code am besten kennen.

hast einen thread gestartet dort? der läuft sicher weiter.
 
Bin Anfänger in der Android Programmierung und möchte gerne noch dazulernen. Activity A läuft weiter, warum auch immer. Bisher bin ich davon ausgegangen, dass das ganz normal ist.

Hier ein Ausschnitt aus Activity A
Code:
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationProvider provider = lm.getProvider("gps");
            
GetPreferences();
lm.requestLocationUpdates("gps", logInterval, 1,locationListener);
counter = new MyCount(logInterval,1000);
Code:
private final LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location l) 
             {
             txtLatitude.setText("" + l.getLatitude());
             txtLongitude.setText("" + l.getLongitude());
             }

             public void onProviderDisabled(String provider){}
             public void onProviderEnabled(String provider) {}
             public void onStatusChanged(String provider, int status, Bundle extras) {}
};
Der
Code:
Intent testActivity = new Intent(test.this, testActivity.class);
startActivity(testActivity);
Activity A soll ja auch weiter laufen.
Das Problem ist der Zugriff von Activity B auf Daten aus Activity A.
Da muss es doch bis auf putExtra eine weitere Möglichkeit geben, oder?
 
naja dann mach folgendes:

im listener machst anstelle von settext xxx
ein
lat = l.getlatitude()
lon = l.getlongitude()

und dann machst 2 static methoden
getLat()
und getLon()

dann kannst ActivityA.getLat() und ActivityA.getLon() aufrufen

aber ob das besonders schön ist weiß ich net
 
  • Danke
Reaktionen: MBPower
Danke Dir. Werde ich testen.
Nur wenn das nicht besonders schön ist, wie würdest Du das denn sonst machen?
Ich möchte nur zum testen auf Activity B den aktuellen Speed ganz gross anzeigen lassen.
 
naja du liest den speed ein, warum gibst es nicht direkt auf activityA aus?
 
Das Layout ist schon wegen Überfüllung geschlossen.
Aber ich bin gerade erst drauf gekommen. Andere TextViews oder Button auf unsichtbar zu setzten, oder hast Du sonst noch eine gute Idee?
 
hmm

eventuell einen tabhost. dann kannst umschalten zwischen den beiden activities
 
Es gibt natürlich eine ganz einefache Nethode, variablen Activity-übergreifend zu handeln, ist aber nicht sehr sauber:
Lege die Variable in der Application an.
Also: leite Deine eigene Application klasse von Applikation ab. Mit getApplication() bekommst Du aus jeder Activity Zugriff darauf, und somit auch auf Deine Variable, bzw. deren Getter/Setter.
 
Oder aber einen Service schreiben und diesen in den Activities benutzen
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
114
swa00
swa00
B
Antworten
4
Aufrufe
470
bb321
B
M
  • maksimilian
Antworten
15
Aufrufe
1.695
maksimilian
M
Zurück
Oben Unten