簡體   English   中英

如何使用 viewmodel mvvm 將自定義視圖的數據保存在 Android 中?

[英]How to keep Custom View's data in Android using viewmodel mvvm?

我想防止我的數據旋轉設備。 而不是使用 android:configChanges="orientation|keyboardHidden",我想使用 ViewModel。 我該怎么做? 我要保留的是mydata_x,mydata_y,mydata_color,var radiusarray 我想防止我的數據旋轉設備。 而不是使用 android:configChanges="orientation|keyboardHidden",我想使用 ViewModel。 我該怎么做? 我要保留的是mydata_x,mydata_y,mydata_color,var radiusarray

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityMainBinding =
            DataBindingUtil.setContentView(this, R.layout.activity_main)
        val viewModel: MainActivityViewModel by viewModels()
        binding.main = viewModel
        binding.lifecycleOwner = this
viewModel.myData_x.observe(this, {
            binding.pdfView.myData_x = it
        })
        val listener = View.OnClickListener {
            when (it) {
                binding.decreaseValue -> MyView.radius -= 2
                binding.increaseValue -> MyView.radius += 2
                binding.setRed -> MyView.whatColor = 1
                binding.setBlue -> MyView.whatColor = 2
                binding.setYellow -> MyView.whatColor = 3
                binding.setGreen -> MyView.whatColor = 4
                binding.setBlack -> MyView.whatColor = 0
            }
        }
     ...
    }
}

MainActivity.kt

class MainActivityViewModel : ViewModel() {
    private val _myData_x = MutableLiveData(IntArray(30000))
    val myData_x: LiveData<IntArray>
        get() = _myData_x
    ...
}

MainActivityViewModel.kt

class MyView(context: Context?, attr: AttributeSet) : View(context) {
    var p1 = Paint()
    var p2 = Paint()
    var p3 = Paint()
    var p4 = Paint()
    var p5 = Paint()
    var myData_x = IntArray(30000)
    var myData_y = IntArray(30000)
    var myData_color = IntArray(30000)
    var radiusArray = IntArray(30000)

    companion object {
        var radius = 15
        var whatColor = 0
    }

    var dataNumber = 0
    var mx = 0
    var my = 0

    init {
        myData_x[0] = 0
        myData_y[0] = 0
        myData_color[0] = 0
        radiusArray[0] = 15
        p1.color = Color.BLACK
        p2.color = Color.RED
        p3.color = Color.BLUE
        p4.color = Color.YELLOW
        p5.color = Color.GREEN
    }

    ...
    private fun saveData() {
        myData_x[dataNumber] = mx
        myData_y[dataNumber] = my
        myData_color[dataNumber] = whatColor
        radiusArray[dataNumber] = radius
    }

    override fun onTouchEvent(event: MotionEvent): Boolean {
        mx = event.x.toInt()
        my = event.y.toInt()
        dataNumber += 1
        saveData()
        return true
    }
}

我的視圖.kt

<....MyView
        android:id="@+id/paint_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

我終於找到了路。

 override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        myViewViewModel.saveAlldata(
            binding.pdfView.myData_x, binding.pdfView.myData_y,
            binding.pdfView.myData_color, binding.pdfView.radiusArray, binding.pdfView.dataNumber
        )
    }

只需使用 onsavedinstancestate,我就可以將狀態保存到視圖模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM