1

У меня есть экземпляр NumberPicker, и он работает так, как ожидалось, но мне нужно получить его форму, когда прокрутка останавливается Или когда пользователь только нажимает приращения/декременты. Нажимается кнопка. Значение, которое я должен получить, отображается в текстовом представлении.Как получить значение экземпляра NumberPicker из onValueChange, когда NumberPicker не прокручивается (нажатие кнопок плюс или минус) в Android

Мне удалось получить значение, когда прокрутка останавливалась/становилась бездействующей и отображалась правильно (это делается в onScrollChanged() прослушивателе).

но onScrollChanged() слушателя не будет срабатывать, когда пользователь нажимает на инкремент или декремент кнопках и, если я использую onValueChanged() слушателя текст обновляется, но прокрутка стало очень лаг и медленно (в результате обновления всего времени, когда значение изменилось).

Так что мне нужна помощь, как отображать значение NumberPicker все время, не вызывая задержки или замедления прокрутки NumPicker.

код отрезал следующим образом:

NumberPicker milisecoundsNumberPicker = (NumberPicker) findViewById(R.id.numberPicker); 
    milisecNumberPicker.setFocusable(false); 
    milisecNumberPicker.setFocusableInTouchMode(false); 
    TextView textNumber = (TextView) findViewById(R.id.selectednum); 



    milisecNumberPicker.setMaxValue(10); 
    milisecNumberPicker.setMinValue(0); 
    milisecNumberPicker.setWrapSelectorWheel(false); 
    String[] nums = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; 
    milisecNumberPicker.setDisplayedValues(nums);// array of numbers 
    milisecNumberPicker.setOnScrollListener(new OnScrollListener() { 
     @Override 
     public void onScrollStateChange(NumberPicker view, int scrollState) { 

      if (scrollState == OnScrollListener.SCROLL_STATE_IDLE 
        || scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { 
       view.getValue(); 

       textNumber.setText(view.getValue() + ""); 
//this is ok no lagging but will not work on pressing increments and decrements buttons  
      } 

     } 
    }); 
// If I use this 
    milisecNumberPicker.setOnValueChangedListener(new OnValueChangeListener() { 
     @Override 
     public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 
        // set Text value here causing lagging on scrolling                
     } 
    }); 

К сожалению боя плохого форматирования Я новичок в этом, но может ли один помочь мне в этой теме.

ответ

1

HI

import android.os.Handler; 

...............

milisecoundsNumberPicker.setOnValueChangedListener(new android.widget.NumberPicker.OnValueChangeListener() { 
     @Override 
     public void onValueChange(android.widget.NumberPicker picker, final int oldVal, final int newVal) { 
      final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       public void run() { 
        if (newVal == milisecoundsNumberPicker.getValue()) { 
         textNumber.setText(newVal + ""); 
        } 
       } 
      }, 500);//set time 
     } 
    }); 
+0

Я закончил тем же раствором ... это лучший подход я тоже пришел. –

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