【问题标题】:How to keep Custom View's data in Android using viewmodel mvvm?如何使用 viewmodel mvvm 在 Android 中保留自定义视图的数据?
【发布时间】:2021-03-22 03:11:47
【问题描述】:

我想防止我的数据旋转设备。我想使用 ViewModel,而不是使用 android:configChanges="orientation|keyboardHidden"。我该怎么做?我想保留的是mydata_x,mydata_y,mydata_color,var radiusarray。 我想防止我的数据旋转设备。我想使用 ViewModel,而不是使用 android:configChanges="orientation|keyboardHidden"。我该怎么做?我要保留的是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
    }
}

MyView.kt

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

【问题讨论】:

标签: android android-viewmodel


【解决方案1】:

我终于找到了路。

 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,我就可以将状态保存到视图模型。

【讨论】:

    猜你喜欢
    • 2018-10-13
    • 2018-09-07
    • 2017-06-14
    • 2017-11-28
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多