[英]How to keep Custom View's data in Android using viewmodel mvvm?
I wanna keep my data from rotating device.我想防止我的数据旋转设备。 Instead of using android:configChanges="orientation|keyboardHidden", I want to use ViewModel.而不是使用 android:configChanges="orientation|keyboardHidden",我想使用 ViewModel。 How can I do it?我该怎么做? What i want to keep is mydata_x,mydata_y,mydata_color,var radiusarray
.我要保留的是mydata_x,mydata_y,mydata_color,var radiusarray
。 I wanna keep my data from rotating device.我想防止我的数据旋转设备。 Instead of using android:configChanges="orientation|keyboardHidden", I want to use ViewModel.而不是使用 android:configChanges="orientation|keyboardHidden",我想使用 ViewModel。 How can I do it?我该怎么做? What i want to keep is mydata_x,mydata_y,mydata_color,var radiusarray
.我要保留的是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 MainActivity.kt
class MainActivityViewModel : ViewModel() {
private val _myData_x = MutableLiveData(IntArray(30000))
val myData_x: LiveData<IntArray>
get() = _myData_x
...
}
MainActivityViewModel.kt 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我的视图.kt
<....MyView
android:id="@+id/paint_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
I finally found the way.我终于找到了路。
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
)
}
Just using onsavedinstancestate, I can save status to viewmodel.只需使用 onsavedinstancestate,我就可以将状态保存到视图模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.