0

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)
nick isra
  • 99
  • 1
  • 9

0 Answers0