livedata and observer on needed fragments

livedata
Lucas Delanier 2 years ago
parent 245ff1bffd
commit 20df5325ab

@ -17,7 +17,6 @@ import android.widget.ImageView
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
@ -54,12 +53,7 @@ class CollectFragment() : Fragment() {
initializeViews(view) initializeViews(view)
// Set up accelerometer listener // Set up accelerometer listener
viewModel.currentPlayer.value?.let { setUpAccelerometerListener(view, it) }
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
setUpAccelerometerListener(view, it)
})
// Set up activity orientation // Set up activity orientation
setUpActivityOrientation() setUpActivityOrientation()
@ -109,7 +103,7 @@ class CollectFragment() : Fragment() {
// Generate a resource item and XP reward // Generate a resource item and XP reward
val item = Generator.generateLootCollection() val item = Generator.generateLootCollection()
currentPlayer.addItem(item) viewModel.addItem(item)
currentPlayer.gainXp(item.type.xpReward) currentPlayer.gainXp(item.type.xpReward)
//reset to 0 the progress bar //reset to 0 the progress bar

@ -93,7 +93,7 @@ class CraftFragment : Fragment() {
viewModel.craft(recipe) viewModel.craft(recipe)
} }
buttonForgeMax.setOnClickListener{ buttonForgeMax.setOnClickListener{
currentPlayer.craft(recipe, RecipeManager.HowManyCraftable(recipe, currentPlayer)) viewModel.craft(recipe, RecipeManager.HowManyCraftable(recipe, currentPlayer))
} }

@ -6,7 +6,6 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast import android.widget.Toast
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.example.shakecraft.model.Tool import com.example.shakecraft.model.Tool
@ -24,18 +23,15 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
} }
override fun onItemLongClick(position: Int) { override fun onItemLongClick(position: Int) {
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer { if (viewModel.currentPlayer.value!!.items[position] is Tool) {
if (it.items[position] is Tool) { val text = if (viewModel.equipeItem(viewModel.currentPlayer.value!!.items[position]) ) " was well equipped" else " has been well unequipped"
val text = if (it.equipeItem(it.items[position]) ) " was well equipped" else " has been well unequipped" Toast.makeText(
Toast.makeText( context,
context, viewModel.currentPlayer.value!!.items[position].type.name + text,
it.items[position].type.name + text, Toast.LENGTH_SHORT
Toast.LENGTH_SHORT ).show()
).show() setUpRecyclerView(view?.parent as ViewGroup, this)
setUpRecyclerView(view?.parent as ViewGroup, this) }
}
})
} }
override fun onCreateView( override fun onCreateView(
@ -50,18 +46,15 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
return view return view
} }
private fun setUpRecyclerView(view: View,listener: AdapterInventory.OnItemLongClickListener ) { private fun setUpRecyclerView(view: View,listener: AdapterInventory.OnItemLongClickListener ) {
recyclerView = view.findViewById(R.id.recyclerviewInventory) recyclerView = view.findViewById(R.id.recyclerviewInventory)
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer { with(recyclerView) {
with(recyclerView) { layoutManager = LinearLayoutManager(view.context)
layoutManager = LinearLayoutManager(view.context) adapter = viewModel.currentPlayer.value?.let {
adapter = AdapterInventory( AdapterInventory(viewModel.currentPlayer.value!!.items, listener ,
it.items,
listener,
it it
) )
} }
}) }
} }

@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.example.shakecraft.data.Stub import com.example.shakecraft.data.Stub
import com.example.shakecraft.model.Boss import com.example.shakecraft.model.Boss
import com.example.shakecraft.model.Item
import com.example.shakecraft.model.Recipe import com.example.shakecraft.model.Recipe
class MainViewModel : ViewModel() { class MainViewModel : ViewModel() {
@ -14,8 +15,25 @@ class MainViewModel : ViewModel() {
lateinit var currentBoss : Boss lateinit var currentBoss : Boss
val isBossInitialized get() = this::currentBoss.isInitialized val isBossInitialized get() = this::currentBoss.isInitialized
fun craft(recipe : Recipe){ fun craft(recipe : Recipe, count : Int = 1){
currentPlayer.value?.craft(recipe) currentPlayer.value?.craft(recipe, count)
currentPlayer.value = currentPlayer.value currentPlayer.value = currentPlayer.value
} }
fun addItem(item: Item) {
currentPlayer.value?.addItem(item)
currentPlayer.value = currentPlayer.value
}
fun gainXp(xpReward: Int) {
currentPlayer.value?.gainXp(xpReward)
currentPlayer.value = currentPlayer.value
}
fun equipeItem(item: Item): Boolean {
currentPlayer.value?.equipeItem(item)
currentPlayer.value = currentPlayer.value
return true
}
} }
Loading…
Cancel
Save