2013-09-01 1 views
3

Я расширил класс NumberPicker, я переопределил setOnValueChangedListener, но когда я отлаживаю код и нажимаю кнопку «плюс» на цифровом пикселе, он никогда не проходит в моей точке останова внутри метода setOnValueChangedListener. Что-то не так?Android numberpicker, никогда не переходите из контрольной точки OnValueChangedListener

@TargetApi(Build.VERSION_CODES.HONEYCOMB)//For backward-compability 
public class NumberPickerCustom extends NumberPicker 
{ 
    private int clickNumber = 0; 

    public NumberPickerCustom(Context context) { 
     super(context); 
    } 

    public NumberPickerCustom(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     processAttributeSet(attrs); 
    } 

    public NumberPickerCustom(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     processAttributeSet(attrs); 
    } 
    private void processAttributeSet(AttributeSet attrs) { 
     //This method reads the parameters given in the xml file and sets the properties according to it 
     this.setMinValue(attrs.getAttributeIntValue(null, "min", 0)); 
     this.setMaxValue(attrs.getAttributeIntValue(null, "max", 0)); 
     this.setValue(attrs.getAttributeIntValue(null, "value", 0)); 
    } 

    @Override 
    public void setOnValueChangedListener(
      OnValueChangeListener onValueChangedListener) 
    { 
     super.setOnValueChangedListener(onValueChangedListener); 
     if (onValueChangedListener==null) 
     { 
      onValueChangedListener = new OnValueChangeListener() { 

       @Override 
       public void onValueChange(NumberPicker picker, int oldVal, int newVal) 
       { 
        clickNumber++; 
        if (clickNumber>10) 
        { 
         clickNumber = -1000; 
         Toast.makeText(getContext(), "Clicca sul numero centrale per inserire direttamente un valore", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }; 
     } 
    } 
} 
+0

вам не нужен сборщика пользовательский номер для установки мин максимальное значение. вы можете использовать 'np.setMaxValue (100); np.setMinValue (0) '. Зачем вам нужен специальный выборщик? – Raghunandan

+1

Да, я знаю, я только думаю, что это более элегантно: D Но проблема не в этом, знаете ли вы, почему слушатель ошибается? – Accollativo

ответ

1

Вы можете initializze пользовательский номер сборщика

View rootView = inflater.inflate(R.layout.fragment_random_block, container, false); 
NumberPickerCustom np = (NumberPickerCustom) rootView.findViewById(R.id.numberPickerCustom); 
np.setOnValueChangedListener(this); 

Убедитесь, что класс реализует

implements OnValueChangeListener 

Тогда

@Override 
public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 
    Toast.makeText(MainActivity.this, "Clicca sul numero centrale per inserire direttamente un valore", Toast.LENGTH_SHORT).show(); 
    } 
} 

Snap Shot:

Когда вы измените значение, вы увидите, что тост изменит то же самое в соответствии с вашим требованием.

enter image description here

Edit:

Изменение пользовательского NumberPicker ниже

public class NumberPickerCustom extends NumberPicker implements OnValueChangeListener 
{ 
    public NumberPickerCustom(Context context) { 
     super(context); 
    } 

    public NumberPickerCustom(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     processAttributeSet(attrs); 
    } 

    public NumberPickerCustom(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     processAttributeSet(attrs); 
    } 
    private void processAttributeSet(AttributeSet attrs) { 
     //This method reads the parameters given in the xml file and sets the properties according to it 
     this.setMinValue(attrs.getAttributeIntValue(null, "min", 0)); 
     this.setMaxValue(attrs.getAttributeIntValue(null, "max", 0)); 
     this.setValue(attrs.getAttributeIntValue(null, "value", 0)); 
     this.setOnValueChangedListener(this); 
    } 

    @Override 
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 
     Toast.makeText(getContext(), "New Value is"+newVal, Toast.LENGTH_SHORT).show(); 
    } 
} 

ФОТОГРАФИЯ

enter image description here

+0

Спасибо Rag! Я уже знаю, как это исправить. Мне просто интересно, почему я не могу установить слушателя из пользовательского класса. Возможно, я ошибаюсь, но я думаю, что это уместно установить его из пользовательского класса. Я просто здесь, чтобы узнать что-то: D Спасибо в любом случае! ;) – Accollativo

+0

@Accollativo вам нужно инициализировать свой пользовательский набор чисел, а затем установить слушателя для него. Как кнопка. вы инициализируете, а затем устанавливаете слушателя. – Raghunandan

+0

@Accollativo да можно. проверьте редактирование – Raghunandan

Смежные вопросы