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
相关推荐
Android support.v7包
基于新包 androidx.fragment.app.Fragment androidx.fragment.app.FragmentManager androidx.fragment.app.FragmentTransaction 一个帮助你学习fragment的练手项目
仿美团登陆页面顶部tab实现,利用TabLayout + Fragment + ViewPager实现顶部tab选项卡切换,替换了过时的TabHost,
( 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
最新的android-support-v4和glide-3.6.1 有RoundedBitmapDrawable等新的类,官方支持裁剪圆角,圆角矩形
androidx-fragment-1.1.0.aar
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 ...
将fragment和listview结合使用 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment1, null); ...
安卓app开发之Android Fragment使用教程.zip
这些代码可以思科认证,有效对你的发展,也可以对你的考试认证有帮助,里面包含更有不一样的代码,有思科的考场的,种类繁多,希望对你有帮助,
学习开源中国Android客户端,一边写学习博客一边看源码制作的demo。
主要介绍了AndroidX下使用Activity和Fragment的变化详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
用于兼容安卓3.0以下的版本,拥有自己特殊的fragment控件
<activity android:name="Settings$EthernetSettingsActivity" ...meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value="com.android.settings.EthernetSettings" /> </activity>
FragmentTabHost常见使用方法,http://blog.csdn.net/yalinfendou博客中有详细介绍……
fragment_menu.xml代码: ...import android.app.FragmentTransaction; import android.os.Bundle; public class MainActivity extends Activity { private FragmentTransaction beginTransacti
meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value="com.android.settings.TetherSettings" /> + + <activity android:name="Settings$EthernetSettingsActivity" + android:...
安卓Android源码——Android ViewPager Fragment.zip
GitHub上的一个开源工具,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。