编译时出现以下错误:
BindingAdapter onOpacityValueChanged(android.widget.SeekBar,int,boolean): old values should be followed by new values. Parameter 2 must be the same type as parameter 3.
public void onOpacityValueChanged(SeekBar seekBar, int newOpacity, boolean fromUser) {
^
XML代码是:
<SeekBar
android:id="@+id/soaring_forecast_seekbar_opacity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:min="0"
android:onProgressChanged="@{forecastDisplay::onOpacityValueChanged}"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="@+id/soaring_forecast_constraint_layout"
app:layout_constraintStart_toStartOf="@+id/soaring_forecast_constraint_layout"
app:layout_constraintTop_toBottomOf="@+id/soaring_forecast_image_time"/>
,源代码为:
@BindingAdapter(value={"android:onProgressChanged"})
public void onOpacityValueChanged(SeekBar seekBar, int newOpacity, boolean fromUser) {
forecastOverlayOpacity = newOpacity;
appPreferences.setForecastOverlayOpacity(newOpacity);
stopImageAnimation();
displayForecastImageSet();
}
从我可以看到的代码与SeekBarBindingAdapter onProgressChanged匹配。我想念什么?
答案 0 :(得分:1)
从我可以看到的代码匹配到SeekBarBindingAdapter onProgressChanged。我想念什么?
BindingAdapter onOpacityValueChanged(android.widget.SeekBar,int,boolean):旧值 应该跟随新的值。参数2必须与以下类型相同 参数3. public void onOpacityValueChanged(SeekBar seekBar,int newOpacity,布尔值fromUser){ ^
您遵循的方式不正确。 @BindingAdapter
用于需要一些自定义实现的地方。参见documentation。
因此从您的方法中删除@BindingAdapter(value={"android:onProgressChanged"})
。
或者您可以通过使用lambda表达式使您的方法更加简单。
public void onOpacityValueChanged(int newOpacity) {
//something
}
和
android:onProgressChanged="@{(sb, value, fromUser)->forecastDisplay.onOpacityValueChanged(newValue)}"
答案 1 :(得分:0)
我看到我把这个复杂化了。我不需要// @ BindingAdapter(value = {“ android:onProgressChanged”})
有效的是:
//@BindingAdapter(value={"android:onProgressChanged"}) <- Don't need.
public void onOpacityValueChanged(SeekBar seekBar, int newOpacity, boolean fromUser) {
forecastOverlayOpacity = newOpacity;
appPreferences.setForecastOverlayOpacity(newOpacity);
stopImageAnimation();
displayForecastImageSet();
}
答案 2 :(得分:-1)
将搜索栏声明为全局
SeekBar myseekBar;
在OnCreateView中:
myseekBar = findViewById(R.id.myseekBar);
myseekBar.setProgress(1);
myseekBar.setMax(10);
myseekBar.incrementProgressBy(1);
它将搜索栏划分为10点标度,每个点标为1点标度。
myseekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
{
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
// get progress here
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) { }
@Override
public void onStopTrackingTouch(SeekBar seekBar) { }
});
来自xml:
<SeekBar
android:id="@+id/myseekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:progressBackgroundTint="@color/SplashScreen"
android:progressTint="@color/BlueText"
android:layout_marginBottom="20dp" />
这是显示,启动搜索栏以及通过xml和代码对其进行访问的方式
希望有帮助