viewModel با آرگومان ورودی و کلاس فکتوری
جمعه, ۳ ارديبهشت ۱۴۰۰، ۰۶:۳۷ ق.ظ
اگر کلاس viewModel دارای آرگومان باشد، در این صورت برای instance کردن آن باید کلاس فکتوری تعریف کنیم:
class ViewModelFactory(private val num:Int): ViewModelProvider.Factory{
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if(modelClass.isAssignableFrom(MyViewModel::class.java)){
return MyViewModel(num) as T
}
throw IllegalArgumentException("Not Found")
}
}
این کلاس همیشه به همین فرمت نوشته میشه.
کد زیر در ورودی viewModel یک عدد گرفته و با فشار دادن یک باتن یک مقدار به آن اضافه می شود و در تکست ویو به نمایش درمی آید.
ویو مدل:
public class MyViewModel(private var num : Int) : ViewModel() {
fun add() = ++num
}
اکتیویتی:
class MainActivity : AppCompatActivity() {
lateinit var textView: TextView
lateinit var button: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView = findViewById(R.id.textView)
button = findViewById(R.id.button)
val viewModelFactory = ViewModelFactory(8)//این کلاس در ابتدای پست نشان داده شده
val viewModel = ViewModelProvider(this, viewModelFactory)
.get(MyViewModel::class.java)
button.setOnClickListener(View.OnClickListener {
textView.text = viewModel.add().toString()
})
}
}
۰۰/۰۲/۰۳