Probleme mit dem Spinner

  • Antworten:9
  • Bentwortet
Marco S.
  • Forum-Beiträge: 105

09.09.2010, 13:26:18 via Website

Hallo zusammen,

ich hab eine Activity, und darin einen Spinner.

Ich möchte eigentlich nur den Dialog vom Spinner benutzen, also rufe ich performClick() im onCreate() auf.

Mittels dem OnItemSelectedListener möchte ich abhängig von der Wahl des Niutzers zu einer anderen Activity springen.

Daraus ergibt sich aber ein Problem:

Der erste Eintrag (der quasi vorselektiert ist), liefert bei einem Klick kein Event.

Hat jemand eine Idee wie ich das hinbekomme?

Gruß
Marco Schmitz

Antworten
Marius O.
  • Forum-Beiträge: 1.588

09.09.2010, 14:32:03 via Website

ich kann mir nicht ganz vorstellen was das bringen soll...

dh. willst das jedesmal wenn die acivity startet, dass gleich eine neue activity gestartet wird, da das erste item im spinner schon vorselektiert ist?

Antworten
Marco S.
  • Forum-Beiträge: 105

09.09.2010, 15:24:52 via Website

okay, ich muss mich dann wohl etwas konkretisieren.

ich möchte in einer activity sagen wir online banking machen.

dafür muss ich aber vorher eine bank aussuchen.

ich find ja als bank-auswahl den spinner-dialog sehr angenehm (schnell erzeugt, sieht gut aus, etc).

daher produziere ich folgenden code (der leider den fehler hat, dass das erste element im spinner dialog kein event wirft):


1public void onCreate(Bundle savedInstanceState) {
2
3 Spinner s = (Spinner) findViewById(R.id.spinner);
4 ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item);
5
6 // hole die Listen der Banken aus der Datenbank, fülle den Adapter mit den Bankennamen
7
8 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
9 s.setAdapter(adapter);
10
11 s.setOnItemSelectedListener(new OnItemSelectedListener() {
12
13 private boolean ignoredFirstTime = false;
14
15 @Override
16 public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
17
18 if( ignoredFirstTime ) {
19 // springe mit dem ausgewählten Bankennamen zur nächsten Activity
20 }
21 ignoredFirstTime = true;
22 }
23
24 @Override
25 public void onNothingSelected(AdapterView<?> parent) {
26 // springe zurück zum Hauptmenü
27 }
28 });
29
30 s.performClick();
31}

Gruß
Marco

Antworten
Marius O.
  • Forum-Beiträge: 1.588

09.09.2010, 16:16:26 via Website

ok...jetzt verstehe ich aber mir fällt keine Lösung ein...

ich würde es mit einem workaroud versuchen, indem ich als erst erster eintrag "Bitte wählen sie ein Geldinstitut." eintragen würde....

Antworten
Marco S.
  • Forum-Beiträge: 105

09.09.2010, 16:19:49 via Website

am besten wäre es doch wenn man aus dem spinner den dialog-anteil rausziehen könnte...

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

09.09.2010, 20:00:51 via Website

Ich bin jetzt nicht ganz sicher, was du mit "Dialog-Anteil" meinst...
Vielleicht hilft dir AlertDialog.Builder(...).setSingleChoiceItems(...), wenn du damit meinen solltest, eine Auswahl-Liste auf den Schirm zu zaubern, ohne einen Spinner dazu nutzen zu müssen?

Antworten
Marco S.
  • Forum-Beiträge: 105

09.09.2010, 20:48:56 via Website

ein spinner ist meines erachtens ein gui control was aussieht wie ein dropdown.

klickt man drauf wird ein dialog nachgelagert, wo man die elemente wählen kann.

dabei wird der hintergrund transparent überdeckt usw.

genau diesen dialog anteil meinte ich.

wusste gar nicht dass man mit dem alert builder auch so dialoge bauen kann.

hatte schon befürchtet den dialog komplett per hand bauen zu müssen.

klingt jedenfalls sehr vielversprechend !

vielen dank dafür, ich werde das schnellstmöglich testen.

viele grüße
marco

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

09.09.2010, 22:53:57 via Website

genau diesen dialog anteil meinte ich.

Dann habe ich mit meiner Vermutung ja richtig gelegen - die Liste des Spinners würde ich nicht als Dialog bezeichnen, aber egal, du hast die Lösung ja jetzt.


vielen dank dafür, ich werde das schnellstmöglich testen.

Gerne, das wird funktionieren, hab ich so schon oft benutzt.

Antworten
Marco S.
  • Forum-Beiträge: 105

10.09.2010, 16:31:59 via Website

hi,

also das ganze funktioniert, nur gibt von meiner seite aus ein kleines problem.

man kann den dialog verlassen in dem man den backbutton drückt.

dann lande ich in der "leeren activity" die ich ja nur für den dialog als ne art background gebaut habe.

gibts ne chance darauf zu reagieren?

gibts irgendein event statt des onclicks?

gruß
marco

Antworten
Marco S.
  • Forum-Beiträge: 105

10.09.2010, 16:34:55 via Website

1builder.setOnKeyListener(new OnKeyListener() {
2 @Override
3 public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
4 if( keyCode == KeyEvent.KEYCODE_BACK ) {
5 Intent intent = new Intent();
6 intent.setClass(..., ...)
7 startActivity(intent);
8 return true;
9 }
10 return false;
11 }
12 });

:ph34r:

— geändert am 10.09.2010, 16:35:28

Antworten