1. Nimm jetzt an unserem AGM - Gewinnspiel teil - Informationen zum M1, A2 und A8 findest Du hier, hier und hier!
  1. MBPower, 10.03.2010 #1
    MBPower

    MBPower Threadstarter Erfahrener Benutzer

    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?
     
  2. swordi, 10.03.2010 #2
    swordi

    swordi Gewerbliches Mitglied

    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
     
  3. MBPower, 10.03.2010 #3
    MBPower

    MBPower Threadstarter Erfahrener Benutzer

    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.
     
  4. swordi, 10.03.2010 #4
    swordi

    swordi Gewerbliches Mitglied

    also activity A wird sicher schlafen gelegt wenn du B aufrufst. die empängt dann keine daten mehr. ( onStop wird sicher aufgerufen )
     
  5. TheFlatz|Veit, 10.03.2010 #5
    TheFlatz|Veit

    TheFlatz|Veit Android-Hilfe.de Mitglied

    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?
     
  6. swordi, 10.03.2010 #6
    swordi

    swordi Gewerbliches Mitglied

    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
     
  7. MBPower, 10.03.2010 #7
    MBPower

    MBPower Threadstarter Erfahrener Benutzer

    @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.
     
  8. swordi, 10.03.2010 #8
    swordi

    swordi Gewerbliches Mitglied

    naja du solltest deinen code am besten kennen.

    hast einen thread gestartet dort? der läuft sicher weiter.
     
  9. MBPower, 10.03.2010 #9
    MBPower

    MBPower Threadstarter Erfahrener Benutzer

    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?
     
  10. swordi, 10.03.2010 #10
    swordi

    swordi Gewerbliches Mitglied

    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
     
    MBPower bedankt sich.
  11. MBPower, 10.03.2010 #11
    MBPower

    MBPower Threadstarter Erfahrener Benutzer

    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.
     
  12. swordi, 10.03.2010 #12
    swordi

    swordi Gewerbliches Mitglied

    naja du liest den speed ein, warum gibst es nicht direkt auf activityA aus?
     
  13. MBPower, 10.03.2010 #13
    MBPower

    MBPower Threadstarter Erfahrener Benutzer

    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?
     
  14. swordi, 10.03.2010 #14
    swordi

    swordi Gewerbliches Mitglied

    hmm

    eventuell einen tabhost. dann kannst umschalten zwischen den beiden activities
     
  15. klausa2, 13.03.2010 #15
    klausa2

    klausa2 Fortgeschrittenes Mitglied

    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.
     
  16. Axel, 17.03.2010 #16
    Axel

    Axel Neuer Benutzer

    Oder aber einen Service schreiben und diesen in den Activities benutzen
     

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. android zugriff auf variablen des service