I have a BottomNavigationView in my MainActivity and 3 fragments to switch in between.
All these 3 fragments have almost the same content with some minor naming changes which will display a recyclerView with data from FirebaseDatabase
FruitsFragment.kt:
class FruitsFragment :Fragment() {
private val adapter = GroupAdapter<GroupieViewHolder>()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_fruits,container,false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val ref = FirebaseDatabase.getInstance().getReference("/Fruits/")
ref.addListenerForSingleValueEvent(object: ValueEventListener {
override fun onDataChange(p0: DataSnapshot) {
if (isAdded && activity !=null ){
p0.children.forEach {
val data = it.getValue(UpdateRow::class.java) ?: return
val vegetableName = it.key
val price = data.p
val priceFormatted = PriceQuantityFormat.priceFormat(price)
val quantity = data.q
val downloadURL = data.downloadURL
adapter.add(VegetableRow(requireContext(),ftFragment,vegetableName!!,price,priceFormatted,quantity,downloadURL))
}
}
else {
Toast.makeText(requireContext(),"Error: too fast",Toast.LENGTH_SHORT).show()
}
}
override fun onCancelled(p0: DatabaseError) {
}
})
fruitsRV.adapter = adapter
}
}
Here is my fragment, all the loading of data goes into my adapter(using Groupie) which is just simple loading of textViews
Now switching fast before content load between these fragments crashes my app.
I tried checking isAdded() as suggested by another post on this forum but didnt work at all. Also tried searching everywhere couldn't find an answer.
Thanks in advance.
Edit: error log
Process: com.example.myapplication, PID: 5021
java.lang.IllegalStateException: Fragment VegetablesFragment{6f7374 (10863cd2-1ac1-4318-8959-cd11218fee65)} not attached to a context.
at androidx.fragment.app.Fragment.requireContext(Fragment.java:774)
at com.example.myapplication.VegetablesFragment$onActivityCreated$1.onDataChange(VegetablesFragment.kt:49)
at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@16.0.4:183)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.4:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.4:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.4:55)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)