在引用RecyclerView類的時候編譯不報錯葡秒,運行時報錯找不到類挂滓。
該情況只會在Eclipse中會出現(xiàn),目測是ADT的bug:
04-07 14:34:00.045: E/AndroidRuntime(12739): FATAL EXCEPTION: main
04-07 14:34:00.045: E/AndroidRuntime(12739): Process: com.malata.android.font.fontmanagermaster, PID: 12739
04-07 14:34:00.045: E/AndroidRuntime(12739): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.malata.android.font.fontmanagermaster/com.malata.android.font.fontmanagermaster.MainActivity}: android.view.InflateException: Binary XML file line #8: Error inflating class android.support.v7.widget.RecyclerView
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2534)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2608)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.ActivityThread.access$800(ActivityThread.java:178)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.os.Handler.dispatchMessage(Handler.java:111)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.os.Looper.loop(Looper.java:194)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.ActivityThread.main(ActivityThread.java:5637)
04-07 14:34:00.045: E/AndroidRuntime(12739): at java.lang.reflect.Method.invoke(Native Method)
04-07 14:34:00.045: E/AndroidRuntime(12739): at java.lang.reflect.Method.invoke(Method.java:372)
04-07 14:34:00.045: E/AndroidRuntime(12739): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
04-07 14:34:00.045: E/AndroidRuntime(12739): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
04-07 14:34:00.045: E/AndroidRuntime(12739): Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class android.support.v7.widget.RecyclerView
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.view.LayoutInflater.createView(LayoutInflater.java:633)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
04-07 14:34:00.045: E/AndroidRuntime(12739): at com.malata.android.font.fontmanagermaster.FontListFragment.onCreateView(FontListFragment.java:61)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.Fragment.performCreateView(Fragment.java:2069)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:899)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1072)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.BackStackRecord.run(BackStackRecord.java:852)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.Activity.performStart(Activity.java:6107)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2491)
04-07 14:34:00.045: E/AndroidRuntime(12739): ... 10 more
04-07 14:34:00.045: E/AndroidRuntime(12739): Caused by: java.lang.reflect.InvocationTargetException
04-07 14:34:00.045: E/AndroidRuntime(12739): at java.lang.reflect.Constructor.newInstance(Native Method)
04-07 14:34:00.045: E/AndroidRuntime(12739): at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.view.LayoutInflater.createView(LayoutInflater.java:607)
04-07 14:34:00.045: E/AndroidRuntime(12739): ... 22 more
04-07 14:34:00.045: E/AndroidRuntime(12739): Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/recyclerview/R$styleable;
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:487)
04-07 14:34:00.045: E/AndroidRuntime(12739): at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:456)
04-07 14:34:00.045: E/AndroidRuntime(12739): ... 25 more
04-07 14:34:00.045: E/AndroidRuntime(12739): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.recyclerview.R$styleable" on path: DexPathList[[zip file "/data/app/com.malata.android.font.fontmanagermaster-2/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
04-07 14:34:00.045: E/AndroidRuntime(12739): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
04-07 14:34:00.045: E/AndroidRuntime(12739): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
04-07 14:34:00.045: E/AndroidRuntime(12739): at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
04-07 14:34:00.045: E/AndroidRuntime(12739): ... 27 more
04-07 14:34:00.045: E/AndroidRuntime(12739): Suppressed: java.lang.ClassNotFoundException: android.support.v7.recyclerview.R$styleable
04-07 14:34:00.045: E/AndroidRuntime(12739): at java.lang.Class.classForName(Native Method)
04-07 14:34:00.045: E/AndroidRuntime(12739): at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
04-07 14:34:00.045: E/AndroidRuntime(12739): at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
04-07 14:34:00.045: E/AndroidRuntime(12739): at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
04-07 14:34:00.045: E/AndroidRuntime(12739): ... 28 more
04-07 14:34:00.045: E/AndroidRuntime(12739): Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
網上大部分帖子對于這個報錯的解釋是導入的包v4和recyclerview.jar不兼容蒸痹,需要導入<sdk>\extras\android\support統(tǒng)一路徑下的v4包和recyclerview头遭。
發(fā)現(xiàn)是因為RecyclerView控件所依賴的android-support-v4包版本不一致造成的,即項目本身使用了一個appcompat的依賴(appcompat中包含了android-support-v4.jar)苞俘,而這個support-v4和RecyclerView依賴的support-v4不是一個版本(從RecyclerView的源碼中可以看到其確實使用了不少的support-v4工具類)
但我的情況仍然不起效盹沈,判斷依然是包不兼容導致的。但不知為何導入同一個版本重新下載的包不起效苗胀。
在stackflow上找到另一種解決方案
- Go to C:\Users\Hk-PC\Desktop\eclipse\adt-bundle-windows-x86->20140702\sdk\extras\android\m2repository\com\android\support\recyclerview-v7\22.1.1
- Open recyclerview-v7-22.1.1.aar file with Winrar
- There is a jar file named classes.jar. Copy that to your project libs folder.
- Right click classes.jar, add to build path.
來源: http://stackoverflow.com/questions/29998850/recyclerview-class-not-found-in-eclipse
不要問我為何這種方式就可以了襟诸,而且這個方法復用性很低,就是說我把包刪掉再按這個步驟來估計又會失效基协。網上資料幾乎沒有歌亲,用AS代替吧