Wert einer Auswahl eines Spinner in eine Variable speichern?

  • Antworten:19
  • Bentwortet
Ludwig H.
  • Forum-Beiträge: 3.256

20.04.2011, 16:25:38 via Website

Hi,

bin grad am rumprobieren mit einem Spinner, aber ich bekomms nicht hin eine Auswahl in eine Variable zu speichern. Hab schon ewig gegoogelt :(
Und zwar möchte ich keinen Listener, sondern möchte den Wert erst in eine Variable übergeben, wenn ein Button geklickt wird.

Weiß jemand wie das geht?

Danke!
Ludwig

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

20.04.2011, 16:35:16 via App

Hey,
ausm Kopf: Spinner.getSelectedItemId();
Lg Ansgar

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

20.04.2011, 17:06:16 via Website

Danke! Kannst du mir da vielleicht noch ein kleines Beispiel zeigen, wie ich das dann machen muss? :grin:

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

20.04.2011, 20:31:15 via App

Kann ich. Wie befüllst du denn den Spinner?
Lg Ansgar

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

20.04.2011, 20:59:23 via Website

Ich unterstelle mal Du meinst einen "Ok" Knopf für die Activity. Dieser hat im Layout das Attribut "android:onClick="onClickOk"". Ich unterstelle weiterhin das der Spinner aus einem Cursor gefüttert wird und der Schlüssel wie üblich _id heißt:

1public void onClickOk(View view) {
2 Cursor cursor = (Cursor) spinner.getSelectedItem();
3 long schluessel = cursor.getLong(cursor.getColumnIndexOrThrow("_id")));
4}

Gruß
Harald

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

20.04.2011, 22:21:21 via Website

Hi,

danke euch, so hab ich das ganze im Quelltext:

strings.xml:
1<string name="myspinner">Auswahl</string>
2 <string-array name="myspinner">
3 <item>Auswahl 1</item>
4 <item>Auswahl 2</item>
5 </string-array>

main.xml:
1<Spinner android:id="@+id/spinner"
2 android:layout_width="fill_parent"
3 android:layout_height="wrap_content"
4 android:prompt="@string/myspinner">
5 </Spinner>

java-Datei:
1Spinner spinner = (Spinner) findViewById(R.id.spinner);
2 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
3 this, R.array.myspinner, android.R.layout.simple_spinner_item);
4 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
5 spinner.setAdapter(adapter);

Ich hab ich eine Rechnung in der App, die von der Auswahl des Spinners beinflusst werden soll. Heißt, erst wenn ich auf den Berechnen Button klicke, soll die Auswahl "abgerufen" und in eine Variable gespeichert werden, damit ich die Variable abfragen kann.
Bei EditText geht das ja ganz einfach mit:
1EditText inputHeight = (EditText) findViewById(R.id.inputheight);
2 Double height = Double.parseDouble(inputHeight.getText().toString());

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

21.04.2011, 00:46:21 via App

Hey,
guck doch mal ein bisschen rum, was der Spinner so kann.. Developer.Android.com ist dafür sehr gut. Einfach Spinner in der Suche oben rechts eingeben.
Es gibt so auch Spinner.getSelectedItemPosition(); Damit kriegste die Position deines Items (Sagt ja auch der Name :grin:)
Musst du mal gucken, ob es beim ArrayAdapter sowas wie Adapter.getItemAtPosition() oder so gibt, damit du an den Wert kommst. Weiß das grad nicht aus dem Kopf..
Lg Ansgar
P.S. Du weißt, was ein Array ist? Vielleicht gibt es ja eine Funktion, um dir einen Array aus den Ressourcen zu holen. Dann könntest du den Wert aus dem Array lesen, der an der Position ist, die dir der "Code" oben in diesem Post gibt..

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

21.04.2011, 08:36:06 via Website

Ansgar M
Vielleicht gibt es ja eine Funktion, um dir einen Array aus den Ressourcen zu holen. Dann könntest du den Wert aus dem Array lesen, der an der Position ist, die dir der "Code" oben in diesem Post gibt..

Gibt es ;-) --> getResources().getStringArray()
Wir hatten das Thema hier schon letztens und waren uns alle halbwegs einig, dass es sinnvoller ist bei Arrays, die man in den Ressourcen definiert die selektierte Position zu speichern, statt die ID des Elements.
Auf die Position hat man Einfluss, auf die ID im worst-case nicht.

— geändert am 21.04.2011, 08:36:24

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

21.04.2011, 10:39:45 via Website

Also Danke erstmal!

Sehe ich das richtig, dass ich das dann so abfragen muss?
1String[] items;
2 items = getResources().getStringArray(R.array.spinner); //spinner ist der Name des Spinners
Dann bekomm ich als Wert von items aber nur [Ljava.lang.String;@43774128 :(

— geändert am 21.04.2011, 10:40:31

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

21.04.2011, 10:56:19 via Website

Ist doch klar ... das sind nun aber wirklich absolute Java-Grundlagen :)

Was macht man denn mit einem Array?
Man iteriert mit einer Schleife drüber...man greift direkt über items[0] ... auf die Elemente zu...

Also Tipp:

1int position = // selected position des Spinner
2String value = items[position];

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

21.04.2011, 16:21:32 via Website

Also nach langem rumprobieren hab ichs doch nich geschafft :D
naja, trotzdem Danke!

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

21.04.2011, 17:36:53 via Website

Also als letztes hatte ich es so:

1Spinner sex = (Spinner) findViewById(R.id.spinner);
2 String[] items;
3 items = getResources().getStringArray(R.array.spinner);
Hab aber zwischenzeitlich unreproduzierbare andere Sachen versucht :grin: :*)

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

21.04.2011, 20:27:42 via App

Also dein Name deines Spinners lässt schließen, dass da männlich oder weiblich reinkommt? Da könnte man einfach mit if(sex.getSelectedItemPosition()==0) und nem else arbeiten.
Sonst ist dein Code gar net so falsch. Den "Wert" (hier ein String), der angeklickt wurde kriegste mit
1String wert = items[sex.getSelectedItemPosition()];
Lg Ansgar

— geändert am 21.04.2011, 20:28:44

Ludwig H.

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

21.04.2011, 23:23:14 via Website

Ja, genau :) männlich oder weiblich...

Habs jetzt so gemacht, aber da krieg ich nen Force Close :blink:
1Spinner sex = (Spinner) findViewById(R.id.spinner);
2String[] items = null; // das hat eclipse so reinverbessert...
3String sexvar = items[sex.getSelectedItemPosition()];

EDIT: Mit dem
1if(sex.getSelectedItemPosition()==0)
gehts! Das "im" if ist männlich und das "im" else ist weiblich :)

Danke nochmal!

— geändert am 21.04.2011, 23:28:02

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

22.04.2011, 00:39:37 via Website

aber da krieg ich nen Force Close

Wie überraschend, wenn du items in Zeile 2 auf null setzt und diesen Wert dann in Zeile 3 dereferenzierst...

Ohne dir zu nahe treten zu wollen: verstehst du eigentlich irgendwas von dem, was die Leute dir hier zu vermitteln versuchen, oder kopierst du die Schnipsel einfach nur?

Wo ist denn die Zeile
items = getResources().getStringArray(R.array.spinner);
aus deinem vorletzten Post abgeblieben?
Die gehört zwischen Zeile 2 und 3 deines letzten Postings eingefügt.

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

22.04.2011, 00:43:18 via Website

Ah, Danke, das werd ich mal ausprobieren :D
Ja, ich bin gerade dabei ein Büchlein über Java zu lesen und versuch mich nebenher schonmal ein bisschen im Programmieren... :girl:

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

22.04.2011, 02:07:21 via App

Und falls das Buch zu langweilig ist (Welches?). Mit diesen Videos (sehr leichtes Englisch) hab ich mir meine ersten Java Kenntnisse angeeignet: http://www.thenewboston.com/?cat=36&pOpen=tutorial
Bis einschließlich Video 49 ist es noch allgemein, danach geht er auf das UI am PC ein, das brauchste nicht mehr..
Lg Ansgar

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

22.04.2011, 12:36:26 via App

Danke für den Tipp, werd ich mir mal anschauen.
Das Buch heißt Einstieg in Java, ist auch vom Galileo Verlag. Danach kommt noch Java ist auch eine Insel dran... ;)

Antworten