双向数据绑定SeekBar

时间:2018-08-08 17:44:17

标签: java android

我被困在试图为搜索栏使用两种方式的数据绑定。我想做的是在其上方的文本视图中显示搜索栏的进度。我一直在寻找解决方案,但似乎都没有用。

这是viewModel

(该类从BaseObservable扩展

private int playbackSpeed;
private int playbackSpeedDisplay;

@Bindable
public int getPlaybackSpeed() {
    return playbackSpeed;
}

public void setPlaybackSpeed(int speed) {
    this.playbackSpeed = speed;
    notifyPropertyChanged(BR.playbackSpeed);
    setPlaybackSpeedDisplay(speed);
    Log.d("PlaybackSpeedViewModel", "Playback Speed set at " + speed);
}

@Bindable
public String getPlaybackSpeedDisplay() {
    return Integer.toString(playbackSpeedDisplay);
}

public void setPlaybackSpeedDisplay(int speed) {
    this.playbackSpeedDisplay = speed;
    notifyPropertyChanged(BR.playbackSpeedDisplay);
}

布局

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<data>
    <variable
        name="viewModel"
        type="com.android.PlaybackSpeedViewModel"/>
</data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:id="@+id/playback_speed_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{viewModel.playbackSpeedDisplay}"
            tools:text="Playback Speed:" />

        <SeekBar
            android:id="@+id/playback_speed_seek_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:progress="@={viewModel.playbackSpeed}"/>
    </LinearLayout>
</layout>

这可能非常简单,但我似乎无法正确理解。 谢谢!

2 个答案:

答案 0 :(得分:1)

确保已正确绑定了viewModel 。我已经在活动中验证了它的正常运行。

<

答案 1 :(得分:0)

下面的代码对我来说很好,可以使用数据绑定从seekBar获取进度值。

fun onSeekBarChanged(seekBar:SeekBar,progress:Int,fromUser:Boolean){

    Logger.d("progress : $progress")

}

            <androidx.appcompat.widget.AppCompatSeekBar
                android:id="@+id/seekBar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:max="4"
                android:onProgressChanged="@{viewModel.onSeekBarChanged}"
                android:padding="@dimen/_8sdp"
                android:progress="1"
                android:progressTint="@color/colorAccent"
                android:thumbTint="@color/colorAccent"
                android:tickMarkTint="@color/colorAccent"
                app:layout_constraintTop_toBottomOf="@+id/textViewIntervalBetweenAttempts"
                tools:ignore="UnusedAttribute" />