Apakah ada cara menggunakan widget Android NumberPicker untuk memilih string, bukan bilangan bulat?
Apakah ada cara menggunakan widget Android NumberPicker untuk memilih string, bukan bilangan bulat?
Jawaban:
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];
}
});
semoga membantu!
setDisplayedValues, NumberPicker tidak akan mengukur lebarnya dengan benar, jadi teks Anda mungkin terpotong bahkan jika pas.
String value = String.valueOf(picker.getValue());
Anda bisa berarti sesuatu yang lain, tetapi tidak terlalu jelas apa yang Anda maksud.
DIPERBARUI:
Anda dapat memalsukannya dengan mengatur formatter Anda sendiri:
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 () akan tetap mengembalikan int, jadi Anda mungkin ingin memetakan nama negara ke id mereka.
DITAMBAHKAN: Implementasi NumberPicker memiliki:
public void setRange(int start, int end, String[] displayedValues)
Yang tampaknya melakukan pekerjaan yang lebih baik dari apa yang Anda inginkan daripada pemformat di atas .. meskipun tidak disebutkan dalam dokumentasi jadi mungkin bukan bagian dari api publik
setRange()metode ini di dokumen sama sekali! Ada ide mengapa?
coba solusi ini, semoga membantu anda
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();
}
});
Ini berhasil untuk saya.
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","عربى"});
}
}