'Error Could not find Fragment constructor

some users are suffering from 'could not find Fragment constructor' error but I can't reproduce this error on my emulator and test device

I read these resources [Could not find Fragment constructor], [Could not find fragment constructor (settings activity)], [Could not find Fragment constructor kotlin] but it didn't help.

All the resource tells me to add an empty constructor to the fragment, but in my case every fragment has an empty constructor.

I Share stackTrace and codes below

stackTrace

java.lang.RuntimeException: Unable to start activity ComponentInfo{{packageName}/{packageName}.presentation.main.MainActivity}: androidx.fragment.app.o$d: Unable to instantiate fragment a9.a: could not find Fragment constructor
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2805)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2883)
    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4726)
    at android.app.ActivityThread.-wrap18(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1619)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6523)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)
Caused by: androidx.fragment.app.o$d: Unable to instantiate fragment a9.a: could not find Fragment constructor
    at androidx.fragment.app.c0$b.a(:5)
    at androidx.fragment.app.h0.a(Unknown Source:2)
    at androidx.fragment.app.i0.<init>(Unknown Source:13)
    at androidx.fragment.app.c0.W(:8)
    at androidx.fragment.app.c0.b(:23)
    at androidx.fragment.app.u.lambda$init$1(:1)
    at androidx.fragment.app.u.i(Unknown Source:0)
    at androidx.fragment.app.t.a(Unknown Source:2)
    at androidx.activity.ComponentActivity.onCreate(:1)
    at androidx.fragment.app.u.onCreate(Unknown Source:0)
    at {packageName}.presentation.main.MainActivity.onCreate(Unknown Source:0)
    at android.app.Activity.performCreate(Activity.java:7013)
    at android.app.Activity.performCreate(Activity.java:7004)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
    at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:2)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2758)
    ... 10 more
Caused by: java.lang.NoSuchMethodException: <init> []
    at java.lang.Class.getConstructor0(Class.java:2320)
    at java.lang.Class.getConstructor(Class.java:1725)
    ... 26 more

MainActivity

  • using 'com.google.android.material.bottomnavigation.BottomNavigationView'
  • linked with navigation graph(total 4 fragment)
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        val navFragment = supportFragmentManager.findFragmentById(R.id.mainActivityContainer) as NavHostFragment
        val navController = navFragment.navController
        binding.bottomNavi.setupWithNavController(navController)
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        this.intent = intent
    }

    override fun onResume() {
        super.onResume()
        val dest = intent.getStringExtra("destination")
        dest?.let {
            when (it) {
                "mypage" -> { binding.bottomNavi.selectedItemId = R.id.myPageFragment }
                "lounge" -> { binding.bottomNavi.selectedItemId = R.id.loungeFragment }
                "alarm" -> { binding.bottomNavi.selectedItemId = R.id.alarmFragment }
            }
            intent.removeExtra("destination")
        }
    }
}

HomeFragment

  • inject Glide RequestManager
  • setup toolbar in MainActivity layout
  • HouseContentAction is Interface
import androidx.fragment.app.viewModels

@AndroidEntryPoint
class HomeFragment: Fragment(), HouseContentAction {
    private var _binding: FragmentMainHomeBinding? = null
    private val binding get() = _binding!!
    private val viewModel: HomeViewModel by viewModels()
    @Inject lateinit var glide: RequestManager

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentMainHomeBinding.inflate(layoutInflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        ...
        setUpToolBar()
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }

    private fun setUpToolBar() {
        (requireActivity() as AppCompatActivity).setSupportActionBar(binding.homeToolbar)
        (requireActivity() as AppCompatActivity).supportActionBar?.setIcon(AppCompatResources.getDrawable(requireContext(), R.drawable.head_logo))
        (requireActivity() as AppCompatActivity).supportActionBar?.title = ""
    }

LoungeFragment

@AndroidEntryPoint
class LoungeFragment:Fragment(), LoungeContentActions, LoungeActions {
    private var _binding: FragmentMainLoungeBinding? = null
    private val binding get() = _binding!!
    private val viewModel: LoungeViewModel by viewModels()
    @Inject lateinit var glide: RequestManager

    override fun onCreateView() {
        //same as above
    }

    override fun onViewCreated() {
        //same as above, but no toolbar setting
    }

    override fun onDestroyView() {
        //same as above
    }

MyPageFragment

same as above, but no toolbar

AlarmFragment

same as above, but no toolbar setting and no inject glide



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source