Wert an Activity B von Activity B übergeben

B

Beni

Neues Mitglied
0
Hallo zusammen

Ich bin neu hier und habe angefangen mit Eclipse Android zu programmieren. Bin natürlich noch blutiger Anfänger ;)

Nun bin ich auf ein (sicher simples Problem) gestossen. Ich hab schon einiges gesucht, aber noch nichts passendes gefunden, obwohl es eigentlich recht einfach sein dürfte.

Ich bin gerade an einer "einfachen" app am programmieren. Nun will ich einen Wert, oder eine Variable an eine zweite Activity weitergeben, welche aber einen konstanten Wert hat.

Versuche das mal einfach zu beschreiben, damit ihr seht, das ich echt was simples brauche ;)

Also:

Auf Activity A habe ich 10 Buttons und immer wenn ich auf einen dieser Buttons drücke, öffne ich Activity B. Nun will ich aber jedem Button einen Wert mitgeben. Der Name der Variable mit diesem Wert muss aber immer die selbe sein.

Button1, VariableX=1
Button2, VariableX=2
Button3, VariableX=3

usw.

Auf Activity B will ich dann diesen Wert der VariableX überprüfen und je nach Wert etwas ausführen.

if VariableX =1, dann mach das
if VariableX =2, dann mach dies
if VariableX =3, dann mach jenes

Was ich damit machen will...ich will eine Viewlist machen und je nach gedrücktem Button soll mir die Viewlist einen anderen Inhalt anzeigen.

Hoffe man kommt draus was ich meine ;) Und dass mir jemand von euch helfen oder einen Tipp geben kann. Wäre aber froh für eine Antwort mit dem ganzen Befehl (also Activity A und B), denn ich habe schon einiges ausprobiert, aber finde wohl nicht den passenden Befehl

Habe auch einen Code gefunden, mit dem man einen Wert übergeben kann, aber dummerweise muss man ihn dort selbst angeben. Sprich, ich gebe in einem Textview von Activity A z.B. das Wort "hallo" ein und auf Activity B kommt dann: Ihr Wort war "hallo". Aber eben, das brauch ich nicht so, ich will nichts eingeben müssen, sondern einen fixen Wert mitschicken, den ich dann auswerten kann.

Vielen Dank schonmal, falls mir jemand helfen kann :)

Gruss Beni
 
Also, eine Aktivity braucht den Wert, nur wenn es aktiv wird - deswegen kannst du
es in einen Klasse ( statisch ) oder in den Preferences / Datei abspeichern.

Du kannst diese Werte auch in dem Intent mitgeben, dem du Benutzts um die Aktivity zu starten
 
Vielen Dank schonmal für Deine Antort :)

Das mit dem Intent habe ich schon versucht, es würde auch klappen. Also es klappt auch meine ich ;) Ich kann z.B. auf Button1 in Activity 1 drücken und es öffnet sich Activity 2.

Aber wie sieht dann der Befehl aus für diesen Intent um eine Variable mitzugeben?

Sowas habe ich schon gefunden, aber ich komm damit nicht klar...

Intent i = new Intent(ActivityA.this, ActivityB.class);

i.putExtra("KEY", "WERT");

Wie sieht denn der Befehl für einen stinknormalen Wert aus, den ich weitergeben möchte? Also irgendwie sowas:

Intent i = new Intent(ActivityA.this, ActivityB.class);

i.putExtra(Meine_Variable=1);

und wie ruf ich dann dies bei Activity B wieder auf?

Also:

Activity B

Lade "Meine_Variable"

if Meine_Variable=1, dann
if Meine_Variable=2, dann
if Meine_Variable=3, dann

(oder mit einem Case dann)

Kann gerne das Beispiel posten, welches ich gefunden habe um einen Wert in Activity 1 zu schreiben, welcher dann in Activity angezeigt wird. Falls man dann den so umändern kann, dass ich nichts eingeben muss, sondern eine Vorgegebene Variable mitgeschickt wird. Wenn das geht, wäre ich auch froh ;)
 
intent.putExtra("position", 1); //die zahl bei jedem button anpassen
dann in der neuen activity
String whichButton = getIntent().getStringExtra("position");
 
Und natürclih guarden gegen NPE nicht zu vergessen
 
Vielen Dank Euch, für das helfen :)

Ich habe nun bei Activity A das gemacht:
----------------------------------------------------------------------
Intent i = new Intent(Activity A.this, Activity B.class);
i.putExtra("position", 1);
startActivity(i);
----------------------------------------------------------------------
und Activity B:

----------------------------------------------------------------------
String whichButton = getIntent().getStringExtra("position");
----------------------------------------------------------------------

Einen Fehler bringt er nun nicht, nur dass ich "whichButton" noch nirgends verwende.

Ich nehme an, mein Wert 1 wird nun im String "whichButton" sein, richtig?
Aber wenn ich nun einen vergleich mache, oder sonst diesen String mit einbeziehe, schliesst die App immer.

Wenn ich z.B. sowas mache um es zu testen:

----------------------------------------------------------------------
if (whichButton .length() == 0)
{
new AlertDialog.Builder(this)
.setMessage(R.string.error_name_missing)
.setNeutralButton(R.string.error_ok, null)
.show();
return;
}
----------------------------------------------------------------------

Da ja mein String nicht leer ist, sollte er doch diese Abfrage überspringen, aber eben, soweit komme ich gar nicht.

Ich habe diese Abfrage schon verwendet, sollte also eigentlich gehen, sonst einen Sytax Fehler zeigt er mir auch nicht gerade an.

Könnt Ihr mir nochmals helfen, warum oder wo der Fehler liegt? Sobald ich mit dem String arbeiten will, kackt es beim Button drücken im Emulator ab.

Vielleicht wäre eine Lösung über Globale Variablen besser, sofern ich die von jeder Activity auch wieder überschreiben kann. Müsst ich mich erst schlau machen ;)

Danke nochmals.
 
sry aber du bekommst null zurück. :D
Du gibst nämlich 1 als int und nicht "1" als String.
Ups, sry, war meine Schuld.
Also entweder "1" übergeben oder int pos = getIntent().getIntExtra("position", 0); //zweite parameter ist default value der dir zurückgegeben wird, falls das Extra nicht gefunden wurde, bei Strings ist dies immer null.
 
Zuletzt bearbeitet:
Juhuuuuuuuuu, hat geklappt :) *freu*

Danke vielmals!!!! :)
 
Hallo zusammen

Ich bin es nochmal ;) Ich wollte fragen, ob mir nochmals wer helfen kann. Ich suche ein Beispiel, wie man globale Variablen erstellen/deklarieren kann.

Es müssten hauptsächlich nur zahlen sein, also keine Strings.

Mein Ziel ist es, einige Variablen, wie gesagt global zu deklarieren, damit ich sie in jeder Activity abfragen und auch in jeder Activity die möglichkeit habe, die globale Variable zu ändern.

Also so:

Main:

globale_variable1 = 1;
globale_variable2 = 10;
globale_variable3 = 15;

Activity1 öffnen:

globale_variable1 lesen (globale_variable1 = 1)
irgendetwas ausführen
globale_variable1 ändern und speichern (z.B. globale_variable1 = 8)

Activity2 öffnen

globale_variable1 lesen (globale_variable1 = 8)
irgendetwas ausführen
globale_variable1 ändern und speichern (z.B. globale_variable1 = 4)

und dies natürlich dann mit allen definierten globalen Variablen.

Ist dies möglich? Wenn ja, kennt wer ein Tutorial oder kann mir einen einfachen aber kompleten Beispiel-Code zeigen, damit ich mit dem rumprobieren kann?

Vielen Dank schonmal, falls jemand Zeit hat :)

Gruss Beni
 
Am einfachsten gibtst du deiner Start-Activity statische public-Variablen. Bspw:
PHP:
public class MyStartActivity extends Activity {
    public static int myFirstGlobalVar = 1;
    public static int mySecondGlobalVar = 2;

    /* ... */
}

// Darauf kann aus anderen Activities per
int var = MyStartActivity.myFirstGlobalVar;
// zugegriffen werden
 
Cool, danke :)

Werde gleich die nächsten Stunden damit teste. Kann ich dann diese Variablen aus jeder Activity auch wieder ändern?

Also wenn ich in der StartActivity eine Variable deklariert habe mit

public static int myFirstGlobalVar = 1;

Dann starte ich Activity1 und lese die Variable aus mit eben

int var = StartActivity.myFirstGlobalVar;

Kann ich die Variable dann auch wieder ändern und in der StartActivity speichern?

also irgendwie so in Activity1:

public static int myFirstGlobalVar = 1000;

Dass wenn ich diese Variable anschliessend z.B. aus Activity2 aufrufe, sie nicht mehr 1 sondern 1000 ist?

 
Um dein Hintergrundwissen mal ein bisschen zu erweitern: Also statische Variablen sind pro Klasse einmalig. Das heißt sie werden einmal angelegt, wenn die Klasse geladen wird. Wenn sie als public deklariert sind kann von jeder anderen Klasse auch darauf zugegriffen werden (vorausgesetzt sie kennt sie). Der Zugriff erfolgt per <Klassenname>.<Variablenname>.

Und in der Tat, wie du schon sagtest, wenn der Wert von irgendwo geändert wird, dann ändert er sich auch für alle anderen, die auf die Variable zugreifen.
 
Alles klar, vielen Dank :)

Ich habe in der Ausbildung schon C++ programmiert und auch mal Hobbymässig ein wenig Java. Aber nie etwas grosses gemacht. Vor allem hatte ich noch nie mehrere Activitys, von dem her hab ich wohl noch ein Knoten, wie man da Werte hin und her schieben kann.

Bin froh, wenn man hier Hilfe bekommt :) Desshalb nochmals an alle ein dickes Dankeschön!
 
Nimm doch bitte Abstand von den globalen Variablen. Das ist ganz ganz schlechter Stil, macht es unübersichtlich und führt bei Änderungen schnell zu Fehlern.

Wenn du wirklich globale Werte hast, die überall genutzt werden sollen, dann mach dir ne Klasse, die die Settings beinhaltet und wenn nötig auch in eine Properties-Datei oder Datenbank speichert.
Wenn du es wirklich nur in der Activity brauchst, dann übergebe es als Parameter, sonst kannst du die Activity auch nicht anständig wiederverwenden.
 
Hi Leute,

wie ist es denn möglich eine Variable zu übergeben?
In meinem Program will ich aus einem EditText in eine Variable schreiben und diese dann an ein zweites Activity übergeben.

Hab schon ein paar Sachen gelesen von wegen Serializable machen und dann ans Activity schicken. Hmmm aber wie? Hab da auch nichts drüber im Netz gefunden.

Wäre super wenn jemand einen Rat wüsste. Danke

Sebastian
 
Aus dem EditText kannste nen String kriegen und der ist serialisierbar.
 
Ja, danke habs gerade rausgefunden, hab zu kompliziert gedacht.

Trotzdem vielen Dank!
 
ich hab da auch mal ne frage, ich blicke irgendwie nicht mehr durch:( ich habe meine main activity und meine zweite activity. Ich will über einen Button die zweite activity starten und in dieser dann per click auf einen button dessen beschriftung als zahl immer um 1 erhöhen. soweit so gut, kein problem. Jetzt will ich aber über einen zurück button den wert dieses textes als integer an die main activity übergeben. Was muss ich da machen?
 

Ähnliche Themen

R
  • RalfKahl
Antworten
10
Aufrufe
299
RalfKahl
R
5
Antworten
22
Aufrufe
1.421
590239
5
M
Antworten
8
Aufrufe
954
deek
D
Zurück
Oben Unten