SeekBar.onProgressChanged() 的未知重复
Unknown repetition of SeekBar.onProgressChanged()
如果我通过 seek.setProgress(1) 设置 seekbarprogress 的最小值并通过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
正如你可能看到的,当我将指针拉到最小位置时,即 1 0,1 重复自己的次数。如果在那里放置一些方法并且它开始重复自己,那将是可怕的......谢谢
您可以在设置进度时禁用侦听器,并在设置后启用它。
@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));
}
这是因为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) {
}
});
如果我通过 seek.setProgress(1) 设置 seekbarprogress 的最小值并通过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
正如你可能看到的,当我将指针拉到最小位置时,即 1 0,1 重复自己的次数。如果在那里放置一些方法并且它开始重复自己,那将是可怕的......谢谢
您可以在设置进度时禁用侦听器,并在设置后启用它。
@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));
}
这是因为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) {
}
});