Ошибка привязки данных Seekbar - PullRequest
0 голосов
/ 29 августа 2018

Получение следующей ошибки при компиляции:

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. Чего мне не хватает?

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Я вижу, что я слишком усложнил это. Мне не нужен // @ 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();
}
0 голосов
/ 18 сентября 2018

Из того, что я вижу, код соответствует SeekBarBindingAdapter. onProgressChanged. Чего мне не хватает?

OR

  • Вы можете увидеть в библиотеках Android Studio.

image

BindingAdapter onOpacityValueChanged (android.widget.SeekBar, int, boolean): старые значения должны следовать новые значения. Параметр 2 должен быть того же типа, что и параметр 3. public void onOpacityValueChanged (SeekBar seekBar, int newOpacity, логическое значение fromUser) { ^

@ Методы BindingAdapter должны быть статическими.

Самое важное

То, как вы следуете, неверно. @BindingAdapter используются там, где вам нужна пользовательская реализация. См. документацию .

Так что удалите @BindingAdapter(value={"android:onProgressChanged"}) из вашего метода.

Или вы можете сделать ваш метод еще проще, используя лямбда-выражения.

public void onOpacityValueChanged(int newOpacity) {
//something
}

и

android:onProgressChanged="@{(sb, value, fromUser)->forecastDisplay.onOpacityValueChanged(newValue)}"
0 голосов
/ 29 августа 2018

Объявить панель поиска как глобальную

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 и код

Надеюсь, это поможет

...