Gibt es eine Möglichkeit, das Android NumberPicker-Widget zum Auswählen von Zeichenfolgen anstelle von Ganzzahlen zu verwenden?
Gibt es eine Möglichkeit, das Android NumberPicker-Widget zum Auswählen von Zeichenfolgen anstelle von Ganzzahlen zu verwenden?
Antworten:
NumberPicker picker = new NumberPicker(this);
picker.setMinValue(0);
picker.setMaxValue(2);
picker.setDisplayedValues( new String[] { "Belgium", "France", "United Kingdom" } );
NumberPicker numberPicker = new NumberPicker(this);
String[] arrayString= new String[]{"hakuna","matata","timon","and","pumba"};
numberPicker.setMinValue(0);
numberPicker.setMaxValue(arrayString.length-1);
numberPicker.setFormatter(new NumberPicker.Formatter() {
@Override
public String format(int value) {
// TODO Auto-generated method stub
return arrayString[value];
}
});
hoffentlich hilft das!
setDisplayedValues, misst der NumberPicker seine Breite nicht richtig, sodass Ihr Text möglicherweise abgeschnitten wird, selbst wenn er richtig passt.
String value = String.valueOf(picker.getValue());
Sie könnten etwas anderes bedeuten, aber es ist nicht sehr klar, was Sie meinen.
AKTUALISIERT:
Sie können es fälschen, indem Sie Ihren eigenen Formatierer einstellen:
CountryFormatter implements Formatter {
public String toString(int value) {
switch(value) {
case 0:
return "England";
case 1:
return "France";
}
return "Unknown";
}
}
picker.setFormatter(new CountryFormatter());
getValue () gibt weiterhin ein int zurück, daher möchten Sie wahrscheinlich die Namen von Ländern ihren IDs zuordnen.
ADDED: Die Implementierung von NumberPicker hat:
public void setRange(int start, int end, String[] displayedValues)
Das scheint besser zu funktionieren als der obige Formatierer. Obwohl es in der Dokumentation nicht erwähnt wird, ist es wahrscheinlich nicht Teil der öffentlichen API
setRange()Methode überhaupt nicht in den Dokumenten finden! Irgendwelche Ideen warum?
Versuchen Sie diese Lösung, kann Ihnen helfen
NumberPicker pickers = new NumberPicker(this);
String[] arrayPicker= new String[]{"abc","def","ghi","jkl","mno"};
//set min value zero
pickers.setMinValue(0);
//set max value from length array string reduced 1
pickers.setMaxValue(arrayPicker.length - 1);
//implement array string to number picker
pickers.setDisplayedValues(arrayPicker);
//disable soft keyboard
pickers.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
//set wrap true or false, try it you will know the difference
pickers.setWrapSelectorWheel(false);
//create button to test selected text string
btnPicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//get position (int) from number picker
int pos = pickers.getValue();
//get string from number picker and position
String selecPicker = arrayPicker[pos];
//test toast to get selected text string
Toast.makeText(context, selecPicker , Toast.LENGTH_SHORT).show();
}
});
Das hat bei mir funktioniert.
public class YourClassName extends AppCompatActivity {
NumberPicker picker = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity_layout_file);
picker = (NumberPicker) findViewById(R.id.pickerId_From_your_Layout_file);
picker.setMinValue(0);
picker.setMaxValue(3);
picker.setDisplayedValues(new String[]{"English", "French","Kiswahili","عربى"});
}
}