Как использовать объект MutableLiveData в моем XML? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть объект, который заполнит некоторые поля в моем xml, но изменяемые данные возвращают значение T, и я не могу использовать свойства T.Что мне нужно сделать, чтобы использовать объект T в моем xml?

Я не хочу создавать изменяемые данные для каждого члена объекта.

Извините за мой плохой английский ..

class ExampleFragment: Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val viewModel = ViewModelProviders.of(this).get(MyVm::class.java)

        val binding = DataBindingUtil.inflate<FragmentExampleBinding>(
            inflater,
            R.layout.fragment_house,
            container,
            false
        )

        binding.myVm = viewModel
        binding.lifecycleOwner = this

        return binding.root
    }
}
class MyVm: ViewModel(){
    val house: MutableLiveData<House> by lazy { MutableLiveData<House>().apply{ value = 
        House().apply{ 
            door = "First door"
            window = "My window"
        }
    } }

    val thing: MutableLiveData<String> by lazy { MutableLiveData<String>().apply{ value = "something" } }
}
class House(){
    var door: String = ""
    var window: String = ""
}
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable name="my_vm" type="br.com.MyVm"/>
    </data>

    <LinearLayout
        android:layout_width="match_parent" 
        android:layout_height="match_parent"
        orientation="vertical"
        >

        <!--I need this work-->
        <TextView 
            android:layout_width="wrap_parent" 
            android:layout_height="wrap_parent"
            android:text="my_vm.house.door"
        />

        <!--I need this work-->
        <TextView 
            android:layout_width="wrap_parent" 
            android:layout_height="wrap_parent"
            android:text="my_vm.house.window"
        />

        <TextView 
            android:layout_width="wrap_parent" 
            android:layout_height="wrap_parent"
            android:text="my_vm.thing"
        />
    </LinearLayout>

<layout>

1 Ответ

0 голосов
/ 09 мая 2019

Этот код правильный!Пробовал запустить и работал, я думал, что это не сработало, потому что андроид студия не показала атрибуты при нажатии ctrl + space.

...