'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 |
|---|
