SeekBar代码:
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { Log.d(TAG, "onProgressChanged: -----更改的名称="+layerOperatingSwitchBean.title+"进度="+progress); layerOperatingSwitchBean.percentage=progress; } @Override public void onStartTrackingTouch(SeekBar seekBar) { currentSeekBarName=layerOperatingSwitchBean.title; } @Override public void onStopTrackingTouch(SeekBar seekBar) { } });
场景:我在RecyclerView里面使用SeekBar来改变数据的值
问题:滑动A SeekBar的时候,会改变B SeekBar的值,这里根本就没有触摸B SeekBar,但是B SeekBar的值被改变了
SeekBar代码:
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { //seekBar滑动值改变 } @Override public void onStartTrackingTouch(SeekBar seekBar) { //开始改变seekBar } @Override public void onStopTrackingTouch(SeekBar seekBar) { //结束改变seekBar } });
解决办法:
这里我们在开始改变SeekBar的值onStartTrackingTouch方法里拿到触摸的是哪一个SeekBar,然后在改变SeekBar的onProgressChanged方法里去校验是不是当前滑动的SeekBar,是的话处理,否则跳过,代码如下
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if(TextUtils.equals(currentSeekBarName,layerOperatingSwitchBean.title)){ Log.d(TAG, "onProgressChanged: -----更改的名称="+layerOperatingSwitchBean.title+"进度="+progress); layerOperatingSwitchBean.percentage=progress; } } @Override public void onStartTrackingTouch(SeekBar seekBar) { currentSeekBarName=layerOperatingSwitchBean.title; } @Override public void onStopTrackingTouch(SeekBar seekBar) { } });
结果:问题解决