在Android中,非字符串原始类型的双向数据绑定可以通过使用Android Jetpack库中的LiveData和DataBinding来实现。下面是一个使用Kotlin的示例:
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
kapt 'com.android.databinding:compiler:3.1.4'
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MyViewModel : ViewModel() {
val myNumber = MutableLiveData()
}
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import com.example.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var viewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
binding.viewModel = viewModel
binding.lifecycleOwner = this
}
}
在这个示例中,我们使用了LiveData来实现数据的双向绑定,并使用DataBinding将ViewModel与布局文件进行了绑定。当EditText中的文本发生变化时,ViewModel中的myNumber属性将自动更新,并且TextView中的文本也会随之更新。
请注意,为了使DataBinding正常工作,布局文件的根元素必须是
标签,并且必须设置标签中的
viewModel
变量。并且在Activity中的onCreate()
方法中设置binding.lifecycleOwner = this
,以便LiveData能够观察到Activity的生命周期变化。
希望这个示例能够帮助到你!