[英]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.