Неизвестное повторение SeekBar.onProgressChanged () - PullRequest
0 голосов
/ 25 мая 2018

Метод onProgressChanged () в seek.setOnSeekBarChangeListener () повторяется несколько раз, если я устанавливаю минимальное значение seekbarprogress с помощью seek.setProgress (1) и определяю условие в onProgressChanged () с помощью оператора if, пожалуйста, посмотритев приведенном ниже коде и войдите в систему.

public class MainActivity extends AppCompatActivity {
SeekBar seek;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    seek=(SeekBar) findViewById(R.id.myseek);
    seek.setMax(20);
    seek.setProgress(1);
    seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            int min=1;
            if(progress<min){
                seek.setProgress(min);
            }
            Toast.makeText(getApplicationContext(), Integer.toString(progress), Toast.LENGTH_SHORT).show();
            Log.i("test",Integer.toString(progress));
        }
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });

}
}




   05-25 11:00:41.834 1520-1520/com.example.dyno.seekbartimer I/test: 0
   05-25 11:00:41.846 1520-1520/com.example.dyno.seekbartimer I/test: 1
   05-25 11:00:41.849 1520-1520/com.example.dyno.seekbartimer I/test: 0
   05-25 11:00:41.861 1520-1520/com.example.dyno.seekbartimer I/test: 1
   05-25 11:00:41.864 1520-1520/com.example.dyno.seekbartimer I/test: 0
   05-25 11:00:41.867 1520-1520/com.example.dyno.seekbartimer I/test: 1
   05-25 11:00:41.870 1520-1520/com.example.dyno.seekbartimer I/test: 0

Как вы можете видеть, когда я перетаскиваю указатель на минимальную позицию i, e равно 1, 0,1 повторяется много раз ... это будет ужасно, если поместить какой-либо метод тудаи он начинает повторяться ... спасибо

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Это потому, что seek.setProgress(min); сработает OnSeekBarChangeListener.onProgressChanged

Чтобы избежать этого, не изменяйте прогресс seekBar в progressChanged.Если это обязательно, то используйте следующий подход:

seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            int min=1;
            if(progress<min){
                seekBar.setOnSeekBarChangeListener(null);
                seek.setProgress(min);
                seekBar.setOnSeekBarChangeListener(this);
                return;

            }
            Toast.makeText(getApplicationContext(), Integer.toString(progress), Toast.LENGTH_SHORT).show();
            Log.i("test",Integer.toString(progress));
        }
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });
0 голосов
/ 25 мая 2018

Вы можете отключить прослушиватель при установке прогресса и включить его после его установки.

@Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        seek.setOnSeekBarChangeListener(null);
        int min=1;
        if(progress<min){
            seek.setProgress(min);
        }
        seek.setOnSeekBarChangeListener(this);  
        Toast.makeText(getApplicationContext(), Integer.toString(progress), Toast.LENGTH_SHORT).show();
        Log.i("test",Integer.toString(progress));
    }
...