我是DataBinding的新手,无法弄清楚如何在MVVM中动态扩充视图
更具体地说,要求是使用“添加”按钮上的2个TextViews来点击布局,并删除“删除按钮上的视图”。
没有MVVM,事情似乎很简单,但MVVM可以帮助我完成同样的工作。
答案 0 :(得分:-1)
此示例使用Kotlin作为主要语言。
在您的gradle(app模块)中启用数据绑定
apply plugin: 'kotlin-kapt'
android {
...
dataBinding {
enabled = true
}
...
}
dependencies {
...
// LiveData + ViewModel
implementation "android.arch.lifecycle:extensions:1.1.1"
...
}
现在创建三个文件,如:
现在为TestViewModel添加两个字符串...
class TestViewModel: ViewModel() {
private var textA: String? = null
private var textB: String? = null
fun setUp(textA: String, textB: String) {
this.textA = textA
this.textB = textB
}
//Kotlin needs explicit getters, used by autogenerated class
fun getTextA() = textA
fun getTextB() = textB
}
现在创建一个TestFragment及其layout_test_fragment.xml
布局如下:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.test.viewmodel.TestViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TestFragment">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{viewModel.textA}" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{viewModel.textB}" />
</LinearLayout>
</layout>
拥有布局,编译项目并且AndroidStudio将创建一个名为FragmentTestBinding的类(位置:app&gt; build&gt;生成&gt;源&gt; apt&gt; debug&gt; com.yourpackage&gt; FragmentTestBinding)
最后,在TestFragment中添加以下行
class TestFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val binding = FragmentTestBinding.inflate(inflater, container, false)
val viewModel = ViewModelProviders.of(this).get(TestViewModel::class.java)
viewModel.setUp("Hello World", "from DataBinding")
binding.viewModel = viewModel
return binding.root
}
}
瞧,这就是 result
我将示例上传到github,问候