2011-11-22 18 views

Trả lời

180
NumberPicker picker = new NumberPicker(this); 
picker.setMinValue(0); 
picker.setMaxValue(2); 
picker.setDisplayedValues(new String[] { "Belgium", "France", "United Kingdom" }); 
+3

Điều quan trọng đối với tôi là bạn phải đặt displayValues ​​AND min và max trước khi nó hoạt động. Cảm ơn. –

+0

Điều này tốt hơn nhiều so với câu trả lời được chọn ở trên. –

+2

Nhưng khi tôi nhấp vào văn bản, bàn phím mềm bật ra và tôi có thể chỉnh sửa văn bản. – Confuse

12
String value = String.valueOf(picker.getValue()); 

Bạn có thể có ý nghĩa khác, nhưng không rõ ý bạn là gì.

CẬP NHẬT:

Bạn có thể giả mạo nó bằng cách thiết lập định dạng của riêng bạn:

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() vẫn sẽ trả về một int, vì vậy bạn có thể muốn để ánh xạ tên nước để id của họ.

thêm: Việc thực hiện NumberPicker có:

public void setRange(int start, int end, String[] displayedValues) 

Mà dường như để làm một công việc tốt hơn về những gì bạn muốn thì định dạng trên .. mặc dù nó không được đề cập trong tài liệu như vậy có lẽ isn' t phần của api công

+0

Tôi muốn sử dụng nó để chọn ví dụ một quốc gia. Cũng giống như Spinner Widget, nhưng không mở thêm khung ở phía dưới để chọn giá trị. – timoschloesser

+0

Cập nhật câu trả lời, tuy nhiên có thể có những cách tốt hơn để liệt kê các quốc gia hơn là cố gắng hack NumberPicker để làm điều này. – FunkTheMonk

+0

@FunkTheMonk Tôi không thể tìm thấy phương thức 'setRange()' này trong tài liệu! Bất kỳ ý tưởng tại sao? – iTurki

30
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]; 
    } 
}); 

hy vọng rằng sẽ giúp!

+0

Đây là câu trả lời hay nhất. – samatron

+0

Cách cổ điển, cảm ơn câu trả lời. – Pankaj

+0

nếu nó là một mảng, thì nó không có các phương thức size() và get(). size() nên được thay thế bằng .length và get() được thay thế bằng arrayString [value] – RexSplode

4

thử giải pháp này, có thể giúp bạn

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(); 

     } 
    }); 
Các vấn đề liên quan