【发布时间】:2021-07-05 00:22:07
【问题描述】:
所以我尝试在我的应用程序上实现 viewModel,但它仍然以相同的方式运行。 我想保存我的游戏的当前视图,但是由于应该保存的部分是在一个保存视图的函数中,所以我无法移动它。
这是一些代码。
片段
class GamePlay1Fragment : Fragment() {
// lateinit var front_anim: AnimatorSet
// lateinit var back_anim: AnimatorSet
private lateinit var viewModel: GP1ViewModel
private lateinit var pieces: List<ImageView>
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding: Gameplay1FragmentBinding = DataBindingUtil.inflate(
inflater,
R.layout.gameplay1_fragment,
container, false)
viewModel = ViewModelProvider(this).get(GP1ViewModel::class.java)
binding.backButtonView.setOnClickListener { v: View ->
v.findNavController().navigate(GamePlay1FragmentDirections.actionGamePlay1FragmentToLobbyFragment())
}
pieces = listOf(binding.card1back, binding.card2back, binding.card3back, binding.card4back,
binding.card5back,binding.card6back, binding.card7back,
binding.card8back, binding.card9back, binding.card10back, binding.card11back,
binding.card12back)
viewModel.gameCards = pieces.indices.map { index ->
GameCard(viewModel.images[index])
}
pieces.forEachIndexed { index, piece ->
piece.setOnClickListener {
viewModel.updatingModels(index)
updatingViews()
}
}
return binding.root
}
private fun updatingViews() {
viewModel.gameCards.forEachIndexed { index, gameCard ->
val piece = pieces[index]
piece.setImageResource(if (gameCard.isFacedUp) gameCard.id else allcardbacks)
}
}
}
视图模型
class GP1ViewModel() : ViewModel() {
lateinit var gameCards: List<GameCard>
private var indexOfSelectedPiece: Int? = null
val images = mutableListOf(
R.drawable.memorybatcardfront,
R.drawable.memorycatcardfront,
R.drawable.memorycowcardfront,
R.drawable.memorydragonfront,
R.drawable.memorygarbagemancardfront,
R.drawable.memoryghostdogcardfront
)
init {
images.addAll(images)
images.shuffle()
Log.e(TAG, "ViewModel Created:")
}
fun updatingModels(position: Int) {
val gameCard = gameCards[position]
if (gameCard.isFacedUp) return
if (indexOfSelectedPiece == null) {
restoreGameCards()
indexOfSelectedPiece = position
}
else {
checkingForMatch(indexOfSelectedPiece!!, position)
indexOfSelectedPiece = null
}
gameCard.isFacedUp = !gameCard.isFacedUp
}
private fun restoreGameCards() {
val handler = Handler()
for (gameCard in gameCards) {
if (!gameCard.isMatched) {
handler.postDelayed(runnable, 1000)
gameCard.isFacedUp = false
}
}
}
private fun checkingForMatch(position1: Int, position2: Int) {
if (gameCards[position1].id == gameCards[position2].id) {
gameCards[position1].isMatched = true
gameCards[position2].isMatched = true
}
}
private val runnable = Runnable(){
kotlin.run {
}
}
}
我假设需要保存的部分是片段中的更新视图(),但我无法移动它,因为它还处理图像视图数组(S.O.C)。欢迎任何想法,谢谢。
【问题讨论】:
标签: android android-studio android-fragments android-viewmodel android-savedstate