'Kotlin Bundle send null values
I try to send values of my data from one fragment which is contains Instruments to HolderList which is contain Holder data for comparing values in ArrayList of String which is equal to instrument.id , but when i'm sending values, it's always null. I haven't a lot of experience with sending data between Fragments, but only in this case always return null. Thanks for help!
How i send values
fun sendValues(){
val holderList = HoldersListFragment.newInstance()
val bundle = Bundle()
bundle.putSerializable(Constants.PUT_INSTR_HOLDER_LIST , instruments)
holderList.arguments = bundle
}
When i try to send it
private fun publishInst() = with(b) {
val nameInst = edInstName.text.toString()
val metkaInst = edInstMetka.text.toString()
instruments = Instrument(
name = nameInst ,
instrInfo = metkaInst ,
id = UUID.randomUUID().toString() ,
instrType = 0
)
mainViewModel.publishInstrument(instruments!!).observe(viewLifecycleOwner) {
when (it) {
is State.Loading -> {
Toast.makeText(requireContext() , "Сохраняется..." , Toast.LENGTH_SHORT)
.show()
}
is State.Success -> {
sendValues()
bottomNavigationView.selectedItemId = R.id.instruments
}
is State.Failed -> {
Snackbar.make(requireView() , it.message , Snackbar.LENGTH_SHORT).show()
}
}
}
}
Instance of bundle
@ExperimentalCoroutinesApi
class HoldersListFragment : BaseFragment() , HoldersAdapter.Listener {
private lateinit var b: FragmentHoldersListBinding
private lateinit var adapter: HoldersAdapter
private var bundle: Bundle? = null
private val fbViewModel: FbViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater , container: ViewGroup? ,
savedInstanceState: Bundle?
): View {
b = FragmentHoldersListBinding.inflate(inflater , container , false)
bundle = arguments
setHasOptionsMenu(true)
val activity = activity as AppCompatActivity
activity.setSupportActionBar(b.toolbar2)
b.toolbar2.inflateMenu(R.menu.holder_list_menu)
return b.root
}
How i parse values and use it
override fun deleteItem(holder: Holder) {
DeleteDialog.showDialog(context as AppCompatActivity , object : DeleteDialog.Listener {
override fun onClick() {
if(bundle!= null){
val instrument = bundle?.getSerializable(Constants.PUT_INSTR_HOLDER_LIST) as Instrument
holder.instrOfHolder.forEach {
res->
if(res == instrument.id){
val instrumentUpdate = instrument.copy(instrType = 0)
fbViewModel.checkIsFreeUpdate(instrumentUpdate).observe(viewLifecycleOwner,{
when (it) {
is State.Loading -> {
}
is State.Success -> {
Toast.makeText(requireContext(),"Allright",Toast.LENGTH_SHORT).show()
}
is State.Failed -> {
Log.d("Error" , "Error name :${it.message}")
}
}
})
}
}
}
fbViewModel.deleteHolder(holder)
}
})
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|