C'è un modo per utilizzare il widget NumberPicker di Android per scegliere stringhe invece di numeri interi?
C'è un modo per utilizzare il widget NumberPicker di Android per scegliere stringhe invece di numeri interi?
Risposte:
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];
}
});
spero che aiuti!
setDisplayedValues, NumberPicker non misurerà la sua larghezza correttamente, quindi il tuo testo potrebbe essere tagliato anche se può adattarsi correttamente.
String value = String.valueOf(picker.getValue());
Potresti significare qualcos'altro, ma non è molto chiaro cosa intendi.
AGGIORNATO:
Puoi falsificarlo impostando il tuo formattatore:
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 () restituirà comunque un int, quindi probabilmente vorrai mappare i nomi dei paesi ai loro ID.
AGGIUNTO: L'implementazione di NumberPicker ha:
public void setRange(int start, int end, String[] displayedValues)
Che sembra fare un lavoro migliore di quello che vuoi allora il formattatore sopra .. anche se non è menzionato nella documentazione quindi probabilmente non fa parte dell'API pubblica
setRange()metodo nei documenti! Qualche idea sul perché?
prova questa soluzione, potrebbe aiutarti
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();
}
});
Questo ha funzionato per me.
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","عربى"});
}
}