Android поддержка настраиваемого представления MutableLiveData, двусторонняя привязка - PullRequest
0 голосов
/ 21 июня 2020

Я искал весь inte rnet или пару часов, не повезло

Я пытаюсь понять, как передать MutableLiveData в пользовательское представление

Вот живые данные в ViewModel для привязки данных моей активности

    var perStops: MutableLiveData<Int> =  MutableLiveData(10)

Вот как я использую настраиваемый вид в своей деятельности

            <com.abc.ui.widgets.NumberStepper
            app:amount="@={data.perStops}"
            app:min="0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"/>

Это настраиваемое представление для числа stepper

class NumberStepper(context: Context, attrs: AttributeSet) : RelativeLayout(context, attrs) {
private val rootView = LayoutInflater.from(context)
val binding = NumberPickerCustomLayoutBinding.inflate(rootView,this,true)

init {
    val customAttributes = context.obtainStyledAttributes(attrs, R.styleable.NumberStepper)
    val minAmount = customAttributes.getInteger(R.styleable.NumberStepper_min,0)
    val amount = customAttributes.getInteger(R.styleable.NumberStepper_amount,0)
    binding.suffix = customAttributes.getString(R.styleable.NumberStepper_suffix)?:""
    binding.data = amount
}}

Вот макет XML для NumberPickerCustomLayoutBinding

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

<data>
    <variable
        name="data"
        type="Integer" />
    <variable
        name="suffix"
        type="String" />
</data>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    android:orientation="horizontal">

    <ImageButton
        android:id="@+id/decrement"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginEnd="-10dp"
        android:background="@null"
        android:padding="@dimen/odc_padding16"
        android:src="@drawable/ic_minus" />

    <TextView
        android:id="@+id/display"
        style="@style/TextAppearance.Secondary"
        android:layout_width="45dp"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        android:gravity="center"
        tools:text="1"
        android:text='@{data.toString() + suffix}' />

    <ImageButton
        android:id="@+id/increment"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginStart="-10dp"
        android:background="@null"
        android:padding="@dimen/odc_padding16"
        android:src="@drawable/ic_plus" />
</LinearLayout>
...