android.app.Fragment$InstantiationException 解决办法
在实际的开发中,我遇到过两次android.app.Fragment$InstantiationException报错。
其中一次报错,根据报错提示 “make sure class name exists, is public, and has an empty constructor that is public” ,若Fragement定义有带参构造函数,则一定要定义public的默认的构造函数。即可解决此问题。如果硬要携带参数进去,可以通过Intent结合Bunble的方式携带进去。
第二次报错如下贴的log信息,在“is public, and has an empty constructor that is public” 都满足的情况下,编译ENG版本运行没有任何问题,但是编译USER版本就会出现CRASH错误。原因在于USER版本编译时会代码混淆。
E/AndroidRuntime( 3253): FATAL EXCEPTION: main
E/AndroidRuntime( 3253): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.SubSettings}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.android.settings.mcwill.McWiLLSettings: make sure class name exists, is public, and has an empty constructor that is public
E/AndroidRuntime( 3253): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1964)
E/AndroidRuntime( 3253): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1989)
E/AndroidRuntime( 3253): at android.app.ActivityThread.access$600(ActivityThread.java:126)
E/AndroidRuntime( 3253): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1155)
E/AndroidRuntime( 3253): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 3253): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 3253): at android.app.ActivityThread.main(ActivityThread.java:4482)
E/AndroidRuntime( 3253): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3253): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 3253): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
E/AndroidRuntime( 3253): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
E/AndroidRuntime( 3253): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 3253): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.android.settings.mcwill.McWiLLSettings: make sure class name exists, is public, and has an empty constructor that is public
E/AndroidRuntime( 3253): at android.app.Fragment.instantiate(Fragment.java:581)
E/AndroidRuntime( 3253): at android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1120)
E/AndroidRuntime( 3253): at android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1136)
E/AndroidRuntime( 3253): at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:532)
E/AndroidRuntime( 3253): at com.android.settings.Settings.onCreate(Settings.java:99)
E/AndroidRuntime( 3253): at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime( 3253): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
E/AndroidRuntime( 3253): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1928)
E/AndroidRuntime( 3253): ... 11 more
E/AndroidRuntime( 3253): Caused by: java.lang.ClassNotFoundException: com.android.settings.mcwill.McWiLLSettings
E/AndroidRuntime( 3253): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
E/AndroidRuntime( 3253): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime( 3253): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime( 3253): at android.app.Fragment.instantiate(Fragment.java:571)
E/AndroidRuntime( 3253): ... 18 more
W/ActivityManager( 422): Force finishing activity com.android.settings/.SubSettings
W/ActivityManager( 422): Force finishing activity com.android.settings/.Settings
解决办法:
在对应模块的proguard.flags文件中引入该Fragment所在的类包即可。比如: -keep class com.android.settings.wifi.*Settings
相关推荐
<com.google.android.material.tabs.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:tabMode="scrollable" /> ``` 4. **...
Android support.v7包
基于新包 androidx.fragment.app.Fragment androidx.fragment.app.FragmentManager androidx.fragment.app.FragmentTransaction 一个帮助你学习fragment的练手项目
( 1 ) android.app.Fragment:兼容的最低版本是android:minSdkVersion="11" 因此你的应用不能兼容3.0以下的应用。 可以使用<fragment>标签的,这点很重要,如果是用android.support.v4.app.Fragment的话,是不能是...
一:Fragment简介 3:MainActivity代码详情 ... import android.os.Bundle...import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransa
androidx-fragment-1.1.0.aar
<androidx.fragment.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"> </androidx.fragment.app.FragmentTabHost> ``` 接...
本文实例讲述了Android开发实现Fragment监听返回键事件功能的方法。分享给大家供大家参考,具体如下: 前面的文章Android开发教程之Fragment定义、创建与使用方法详细讲述了Fragment的基本概念与用法。这里再来分析...
import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import ...
在Xamarin.Android中,我们可以使用`Android.Support.V4.App.Fragment`或`AndroidX.Fragment.App.Fragment`(对于新项目推荐使用)来创建和管理Fragment。 要静态地添加Fragment,我们首先需要在布局XML文件中定义...
首先,FragmentTabHost是Android Support Library中的一个类,主要用于在TabHost的基础上支持Fragment的使用。TabHost本身是Android提供的一个容器,可以用来创建带有多个标签页的界面,每个标签页对应一个Activity...
将fragment和listview结合使用 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment1, null); ...
安卓app开发之Android Fragment使用教程.zip
Fragment类需要继承自`androidx.fragment.app.Fragment`(注意:由于AndroidX库的引入,我们不再使用原生的`android.app.Fragment`)。在`DemoFragment`类中,我们创建一个简单的布局,并在`onCreateView`方法中返回...
AndroidX 下使用 Activity 和 Fragment 的变化详解 AndroidX 是 Android 的一个主要组件之一,它提供了许多新的 API 和功能来帮助开发者提高开发效率和代码质量。在 AndroidX 中,Activity 和 Fragment 是两个非常...
用于兼容安卓3.0以下的版本,拥有自己特殊的fragment控件
需要注意的是,Android提供了两种Fragment实现:android.app.Fragment和android.support.v4.app.Fragment。前者是从Android 3.0(API级别11)开始引入的,而后者是Android Support Library的一部分,可以支持更低...
`android.support.v4.app.Fragment`是Google提供的一个兼容库,使得开发者可以在Android 2.1(API级别7)及更高版本上使用Fragment功能。在标题提到的“android Fragment v4版实现”中,我们将探讨如何正确地在项目...
1. **创建Fragment类**:首先,我们需要为每个要切换的界面创建一个Fragment类,继承自android.app.Fragment或者androidx.fragment.app.Fragment。每个Fragment类内部应包含对应的布局文件,并在onCreateView()方法...
在Android SDK中,Fragment有两个版本:一个是支持库中的androidx.fragment.app.Fragment(或旧版的android.support.v4.app.Fragment),另一个是原生的android.app.Fragment。v4支持库是为了兼容低版本Android系统...