【问题标题】:supportFragmentManager not working in fragmentsupportFragmentManager 在片段中不起作用
【发布时间】:2021-01-03 01:43:51
【问题描述】:

我正在尝试在另一个片段中使用底页片段

所以 supportFragmentManager 在下面的代码中显示错误(因为它不适用于片段)

override fun onMapLongClick(point: LatLng)  {
    try {
        CustomBottomSheetDialogFragment().apply {
            show(supportFragmentManager, CustomBottomSheetDialogFragment.TAG)
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

我试过了

* childSupportManager
* requireActivity().supportFragmentManager
* activity.supportFragmentManager
* parentFragmentManager
* (activity as AppCompatActivity).supportFragmentManager

没有任何效果

CustomBottomSheetDialogFragment

    package com.example.weatherapp.ui.dashboard

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import com.example.weatherapp.R
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kotlinx.android.synthetic.main.layout_modal_bottom_sheet.*

class CustomBottomSheetDialogFragment : BottomSheetDialogFragment() {

    companion object {

        const val TAG = "CustomBottomSheetDialogFragment"

    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.layout_modal_bottom_sheet, container, false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        firstButton.setOnClickListener {
            //handle click event
            Toast.makeText(context, "First Button Clicked", Toast.LENGTH_SHORT).show()
        }
        secondButton.setOnClickListener {
            //handle click event
            Toast.makeText(context, "Second Button Clicked", Toast.LENGTH_SHORT).show()
        }
        thirdButton.setOnClickListener {
            //handle click event
            Toast.makeText(context, "Third Button Clicked", Toast.LENGTH_SHORT).show()
        }

        }
     }

显示错误

    W/System.err: java.lang.IllegalStateException: Fragment CustomBottomSheetDialogFragment{37cafe5} 
                  (1887523f-4ffe-4232-bacc-d4114dcfe8a4)} has not been attached yet.
                  at androidx.fragment.app.Fragment.getChildFragmentManager(Fragment.java:980)
                  at com.example.weatherapp.ui.dashboard.DashboardFragment.onMapLongClick(DashboardFragment.kt:163)
                  at com.google.android.gms.maps.zzz.onMapLongClick(Unknown Source:2)
                  at com.google.android.gms.maps.internal.zzao.dispatchTransaction(Unknown Source:5)

【问题讨论】:

  • 请分享您的CustomBottomSheetDialogFragment 代码。

标签: android android-studio kotlin material-design


【解决方案1】:

supportFragmentManager 用于活动

在片段中我们使用 childFragmentManager

val manager: FragmentManager = childFragmentManager
CustomBottomSheetDialogFragment().show(manager, CustomBottomSheetDialogFragment.TAG)

【讨论】:

    【解决方案2】:

    请尝试以下代码:

    val manager: FragmentManager =
        (this.context as AppCompatActivity).supportFragmentManager
           CustomBottomSheetDialogFragment().show(manager, TAG)
    

    CustomBottomSheetDialogFragment类中:

    class CustomBottomSheetDialogFragment() : BottomSheetDialogFragment() {
      //code
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2020-02-03
    • 2014-10-02
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    相关资源
    最近更新 更多