如何在我的xml中使用MutableLiveData对象?

时间:2019-05-09 15:26:12

标签: android mvvm kotlin mutablelivedata

我有一个对象,它将填充xml中的某些字段,但是mutablelivedata返回T值,并且我不能使用T属性。我需要做些什么才能在xml中使用T对象?

我不想为每个对象成员创建一个可变的实时数据。

对不起,我英语不好。

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 :(得分:0)

此代码正确!经过尝试和运行,我认为它不起作用,因为当按下ctrl + space时,android studio没有显示属性。