آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

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()

        })
    }
}
موافقین ۰ مخالفین ۰ ۰۰/۰۲/۰۳
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی