BottomNavigationView переключение между фрагментами быстро просто вылетает приложение - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть BottomNavigationView в моей MainActivity и 3 фрагмента для переключения между ними.

Все эти 3 фрагмента имеют почти одинаковое содержимое с некоторыми незначительными изменениями именования, которые будут отображать программу просмотра с данными из 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
    }

}

Здесьмой фрагмент, вся загрузка данных идет в мой адаптер (с помощью Groupie), который представляет собой простую загрузку textViews

Теперь происходит быстрое переключение, прежде чем загрузка содержимого между этими фрагментами приводит к сбою моего приложения.

Я пыталсяпроверка isAdded (), как было предложено в другом сообщении на этом форуме, но не работает вообще. Также пытался искать везде, не мог найти ответ.

Заранее спасибо.

Редактировать: журнал ошибок

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)
...