Estoy trabajando en la integración de un número selector de mi solicitud. La actividad muestra una lista de elementos, cada uno con un número de selector. El usuario puede aumentar o disminuir la cantidad con el número selector. Al hacer esto me gustaría actualizar un TextView que indica el precio.

Me encontré con dificultades cuando se trata de lograr esto. He hecho un proyecto simple y trató de probar y mostrar un toast mensaje cuando el usuario hace clic en el widget, pero fue en vano.

Mi conjetura es que el número de widget no es tratado como un botón para ello haga clic en un detector no funciona? Agradecería cualquier consejo en lo que respecta a la adición de un agente de escucha.

A continuación es mi código:

NumberPicker np;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    np = (NumberPicker)findViewById(R.id.numberPicker1);
    np.setMaxValue(99);
    np.setMinValue(0);
    np.setValue(50);

    np.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(), "Number selected", Toast.LENGTH_SHORT).show();
        }
    });
}
Usted puede ser que necesite para hacer np.setClickable (true) si todo lo que usted desea, haga clic en eventos. Sin embargo, si usted desea escuchar un cambio de número, ¿por qué no usar OnValueChangeListener?

OriginalEl autor Javacadabra | 2013-01-06

3 Comentarios

  1. 14

    Para establecer oyente con Picker, su actividad debe implementar la interfaz del selector de posición de escucha. (En realidad, su actividad no es obligatoria para implementar la interfaz, también se puede utilizar anónimo método interno. Lo que funciona.)

    Por lo que en su actividad:

    public class MainActivity extends Activity implements NumberPicker.OnValueChangeListener {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            NumberPicker np = (NumberPicker)findViewById(R.id.numberPicker1);
            np.setMaxValue(99);
            np.setMinValue(0);
            np.setValue(50);
            np.setOnValueChangedListener(this);
    
        }
    
        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            Toast.makeText(this, "change", Toast.LENGTH_SHORT).show();
        }
    }
    En el clavo! Muy claro y bien explicado respuesta, gracias!
    su bienvenida 🙂
    No trabajar con un fragmento?
    Funciona con cualquier clase de conectar el oyente. Si usted no desea modificar las clases, a continuación, utilice @nitsujri la respuesta

    OriginalEl autor Zyoo

  2. 9

    Para los nuevos desarrolladores de Android (como yo), la actividad en sí misma no necesarios para implementar el oyente. Simplemente tiene que ser pasado en la setOnValueChangedListener().

    Esto ayuda a evitar demasiados implements y demasiados superposición de @Overrides.

    Ejemplo:

    //Number Picker
    NumberPicker np = (NumberPicker) getView().findViewById(R.id.numberPicker1);
    np.setMinValue(0);
    np.setMaxValue(35);
    
    np.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
        @Override
        public void onValueChange(NumberPicker numberPicker, int i, int i2) {
    
            Toast.makeText(this, "Value was: " + Integer.toString(i) + " is now: " + Integer.toString(i2), Toast.LENGTH_SHORT).show();
    
        }
    });
    Es trabajo… gracias 😉

    OriginalEl autor nitsujri

Dejar respuesta

Please enter your comment!
Please enter your name here