Number Picker???

  • Antworten:10
venni
  • Forum-Beiträge: 89

05.11.2011, 21:16:14 via Website

Hallo zusammen,

ich bin, nachdem ich den Date und Time Picker schon verwende (wenn auch nacheinander und nicht beides in einem Dialog, aber das ist ein anderes Thema ;) ), nun auf der Suche eine Art "Number Picker". Gesucht habe ich nun schon mehrfach, aber nichts gefunden was mir weiterhilft.
Also z.B. sowas:

----- Schnipp -----

+ + + + + + + +
1 2 3 4 5 6 7 8
- - - - - - - -
OK Cancel

----- Schnapp -----

Hat da jemand Ideen wie man sowas umsetzt?

Gruß
Frank

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

05.11.2011, 23:10:37 via Website

Wie wärs den damit: Number Picker

lg Voss

Antworten
venni
  • Forum-Beiträge: 89

06.11.2011, 09:12:01 via Website

Hmm, so nur die Klasse ohne eine kleines Sample dazu...soweit bin ich leider noch nicht :*)
Bei dem Beispiel muss ich noch selbst ein Widget erstellen wenn ich es richtig interpretiert habe.
Kann echt nicht verstehen dass das so schwer ist ein Beispiel zu finden.
Hatte schon mehrere Apps die das nutzten...das motiviert nicht gerade :(

Antworten
Daniel online
  • Forum-Beiträge: 282

06.11.2011, 12:44:58 via Website

Ich habe in meiner Eieruhr App einen Number Picker verwendet.

Schau dir das mal an: http://www.quietlycoding.com/?p=5

mfg,
Daniel

— geändert am 06.11.2011, 12:46:22

Antworten
venni
  • Forum-Beiträge: 89

06.11.2011, 12:52:49 via Website

Das wär super nett :)

Antworten
venni
  • Forum-Beiträge: 89

06.11.2011, 13:22:50 via Website

Hab deine App als Beispiel mal inst.
Sehr nett ;)
So wie Du es gemacht hast passt es schon...nur halt mehrere Ziffern, was ja kein Problem ist.
Wie bringe ich das in einen Dialog der aufpoppt wie beim Date/Time Picker und wo sind die Rückgabewerte drin? Ist auf der Webseite ja im Beispiel auch so.
Puhhh, ich blicks noch nicht...erstmal kurze Pause. Beschäftige mich schon seit Tagen mit dem Picker... :wacko:
Mal etwas Abstand gewinnen.

Antworten
Daniel online
  • Forum-Beiträge: 282

06.11.2011, 15:12:39 via Website

Also das ganze hatte ich ziemlich einfach in Erinnerung. Klatsch einfach alle Klassen in dein Projekt so wie es dort vorgeschlagen wird.
Dann kannst du einfach in einem xml-File einen Numberpicker erstellen:
1<dein.Package.Numberpicker
2 android:layout_width="wrap_content"
3 android:layout_height="wrap_content"
4 android:id="@+id/set_picker_hour"
5 />

Wenn du es in einem Dialog haben willst erstelle für den Dialog ein Layout wo ein Numberpicker drinn ist.
Den Rückgabewert solltest du mit picker.getCurrent() oder so etwas in der Art bekommen.

Ich hoffe das Hilft dir.
Mfg,
Daniel

Antworten
venni
  • Forum-Beiträge: 89

08.11.2011, 20:28:18 via Website

OK, habe nun schon mal die Number Picker in einem Dialog und die drawables angepasst (waren zu groß). Ein Draw 9-patch lässt sich ja nur größer, aber nicht kleiner skalieren.

Ich würde jetzt noch gerne die Werte der einzelnen Picker vorab setzten und die eingestellten Werte auslesen.
Mit ".getCurrent()" funktionierts nicht.
Könntest Du noch mal schauen wie Du die ausgelesen hast?

LG
Frank

Antworten
venni
  • Forum-Beiträge: 89

10.11.2011, 17:53:01 via Website

Um es vielleicht besser verständlich machen zu können...

number_picker_pref.xml:
1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:padding="10dip"
4 android:weightSum="1"
5 android:layout_width="wrap_content"
6 android:layout_height="wrap_content" android:orientation="vertical">
7 <TableRow android:id="@+id/tableRow1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="left" android:padding="2dip">
8 <de.fahrtenbuch_sync.NumberPicker android:id="@+id/pref_num_picker0" android:layout_height="wrap_content" android:layout_width="wrap_content"/>
9 <de.fahrtenbuch_sync.NumberPicker android:id="@+id/pref_num_picker1" android:layout_height="wrap_content" android:layout_width="wrap_content"/>
10 <de.fahrtenbuch_sync.NumberPicker android:id="@+id/pref_num_picker2" android:layout_height="wrap_content" android:layout_width="wrap_content"/>
11 <de.fahrtenbuch_sync.NumberPicker android:id="@+id/pref_num_picker3" android:layout_height="wrap_content" android:layout_width="wrap_content"/>
12 <de.fahrtenbuch_sync.NumberPicker android:id="@+id/pref_num_picker4" android:layout_height="wrap_content" android:layout_width="wrap_content"/>
13 <de.fahrtenbuch_sync.NumberPicker android:id="@+id/pref_num_picker5" android:layout_height="wrap_content" android:layout_width="wrap_content"/>
14 </TableRow>
15 <TableRow android:id="@+id/tableRow1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="left" android:paddingTop="30dip">
16 <Button android:layout_width="116dp" android:id="@+id/button1" android:text="@string/bt_ok" android:layout_height="wrap_content"></Button>
17 <Button android:text="@string/bt_abbrechen" android:id="@+id/button2" android:layout_width="116dp" android:layout_height="wrap_content"></Button>
18 </TableRow>
19</LinearLayout>

Auszug des Dialogs der die Picker aus der numer_picker_pref.xml aufruft.
1private Button.OnClickListener tachoPickerButtonOnClickListener = new Button.OnClickListener(){
2 @Override
3 public void onClick(View v) {
4 dialog = new Dialog(NeueFahrtErfassen.this);
5 dialog.setContentView(R.layout.number_picker_pref);
6 dialog.setTitle(NeueFahrtErfassen.this.getString(R.string.tx_tachostand));
7 dialog.setCancelable(true);
8 Button closeDialog = (Button) dialog.findViewById(R.id.button2);
9 closeDialog.setOnClickListener(new OnClickListener() {
10 @Override
11 public void onClick(View v) {
12 dialog.dismiss();
13 }
14 });
15
16 Button getTacho = (Button) dialog.findViewById(R.id.button1);
17 getTacho.setOnClickListener(new OnClickListener() {
18 @Override
19 public void onClick(View v) {
20 //Hier sollen die eingegebenen Spinnerwerte ausgelesen werden
21 final View Picker0 = (TextView) findViewById(R.id.pref_num_picker0);
22 //Der Toast bringt nur den Pointer
23 Toast.makeText(NeueFahrtErfassen.this, "Picker0: " + Picker0, Toast.LENGTH_SHORT).show();
24
25
26 dialog.dismiss();
27 }
28 });
29 dialog.show();
30 }
31 };

Ich bekomme schon mal den Pointer aber komme noch nicht an den Wert.
Ursprünglich dachte ich mit "Picker0.getCurrent();" den Wert zu bekommen, aber das klappte auch nicht.

Ich denke dass der Pointer schon mal garnicht so verkehrt ist. Nur wie nun weiter?
Das Ganze raubt mir jetzt schon mehrere Tage und so langsam könnt ich echt hinschmeissen :(
SQLite, Spinner, etc. alles läuft. Und nun hänge ich an dieser "Kleinigkeit" NumberPicker...

Bin für jede Hilfe dankbar!!!

Gruß
Frank

Antworten
Daniel online
  • Forum-Beiträge: 282

10.11.2011, 18:15:16 via Website

Hallo Frank,

ich glaube dein Fehler ist ziemlich simple ;)
1NumberPicker picker = (NumberPicker)dialog.findViewById(R.id.pref_num_picker0)
2int gesuchteZahl = picker.getCurrent();

Damit sollte es gehen.
Ersteinmal kannst du deinen Numberpicker auch als Numberpicker instanziieren und nicht als View. Ich weiß aber ehrlich gesagt nicht ob das einen großen Unterschied macht.
Zweitens musst du im Dialog aufpassen, dass du bei findViewById dich auf den Dialog beziehst!

Ich gebe dir noch einen Tipp:
Bevor du mit den Werten arbeitest rufe picker.clearFocus() auf. Ansonsten werden Felder die noch den Focus haben mit 0 (oder der Wert der davor drinnstand) ausgelesen.

Ich hoffe es funktioniert jetzt.
Viele Grüße,
Daniel

Antworten
venni
  • Forum-Beiträge: 89

10.11.2011, 18:23:37 via Website

Daniel...D A N K E ! ! ! !
Ich muss noch viel, viel lernen...

Mein Dank an alle die dieses Forum am leben halten um gemeinsam zu unterstützen! :D:D:D

Antworten