2011-11-22 20 views

Respuesta

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

La clave para mí allí era que tenías que configure los valores mostrados Y el mínimo y máximo antes de que funcione. Gracias. –

+0

Esto es mucho mejor que la respuesta elegida anteriormente. –

+2

Pero cuando hago clic en el texto, el teclado virtual aparece y puedo editar el texto. – Confuse

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

Puede significar algo más, pero no está muy claro a qué se refiere.

ACTUALIZADO:

Usted puede fingir mediante el establecimiento de su propio formateador:

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() todavía devolver un int, por lo que es probable que desee asignar los nombres de los países a sus documentos de identidad.

añadido: La implementación de NumberPicker tiene:

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

que parece hacer un mejor trabajo de lo que quiere entonces el formateador anterior .. aunque no se menciona en la documentación por lo que probablemente ISN' t parte de la API pública

+0

me gustaría utilizarlo para elegir, por ejemplo, un país. Al igual que el Spinner Widget, pero sin abrir un marco adicional en la parte inferior para elegir un valor. – timoschloesser

+0

Respuesta actualizada, sin embargo, hay probablemente mejores formas de listar países que intentar hackear NumberPicker para hacer este tipo de cosas. – FunkTheMonk

+0

@FunkTheMonk ¡No pude encontrar este método 'setRange()' en los documentos! ¿Alguna idea de por qué? – 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]; 
    } 
}); 

espero que ayude!

+0

Esta es la mejor respuesta. – samatron

+0

Manera clásica, gracias por la respuesta. – Pankaj

+0

si es una matriz, entonces no tiene los métodos size() y get(). size() debe reemplazarse con .length, y get() reemplazado con arrayString [value] – RexSplode

4

intentar esta solución, puede ayudar a

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

     } 
    }); 
Cuestiones relacionadas