java - SeekBar.onProgressChanged() 的未知重复

标签 java android seekbar

如果我通过 seek.setProgress(1) 设置 seekbarprogress 的最小值并通过 if 语句在 onProgressChanged() 中定义条件,则 seek.setOnSeekBarChangeListener() 中的 onProgressChanged() 方法会重复多次,请查看在下面的代码中记录。

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

正如您可能看到的,当我将指针拉到最小位置时,即 1 0,1 重复自己的次数。如果在那里放置一些方法并且它开始重复自己,那将是可怕的......谢谢

最佳答案

这是因为seek.setProgress(min);会触发OnSeekBarChangeListener.onProgressChanged

为防止这种情况发生,请避免在 progressChanged 中更改 seekBar 的进度。如果必须这样做,则使用以下方法:

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) {
        }
    });

关于java - SeekBar.onProgressChanged() 的未知重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50522322/

相关文章:

java - 在 Mac 上将 Java 版本永久设置为 8

java - 画中画 - 纵横比太极端

android - 数字选择器问题

java - 在 Android 中使用搜索栏

android - Android 中的垂直搜索栏

java - 不支持不必要地替换不存在的任务

java - 执行端点调用时关闭线程消失

android - 在Jquery Mobile中的一个页面中包含几个页面

Android SeekBar - 进度线不跟随拇指

java - 向重定向页面发送 flash 消息