【问题标题】:Cannot inflate custom viewpager无法膨胀自定义 viewpager
【发布时间】:2017-01-15 03:01:52
【问题描述】:

大家好,我有这个在 java 类中制作的自定义视图寻呼机。当我将该 viewpager 放入 xml 并运行程序时,它崩溃了。从堆栈跟踪来看,它看起来好像在错误的位置,但我不知道如何修复它。

这是我的视图寻呼机类

public class MyViewPager extends ViewPager
    {
        private boolean swipeable;
        public MyViewPager(Context context) {
            super(context);
        }
        public MyViewPager (Context context, AttributeSet attrs) {
            super(context, attrs);
            this.swipeable = true;
        }

        @Override
        public boolean onTouchEvent(MotionEvent event) {

            if (this.swipeable) {

                return super.onTouchEvent(event);

            }
            return false;
        }
        @Override
        public boolean onInterceptTouchEvent(MotionEvent event) {

            if (this.swipeable) {

                return super.onInterceptTouchEvent(event);

            }
            return  false;
        }
        public void setSwipeable(boolean swipeable) {

            this.swipeable = swipeable;

        }

    }

这是我的 xml

<android.support.design.widget.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/main_TL"
            app:tabTextColor="@color/white"
            app:tabSelectedTextColor="@color/white"
            app:tabMaxWidth="0dp"
            app:tabGravity="fill"
            app:tabMode="fixed"
            app:tabIndicatorColor="@color/white"
            app:tabBackground="@color/salmon_main"/>
        <com.daprlabs.aaron.zivitApp.Main.Main.MyViewPager
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/main_VP">
        </com.daprlabs.aaron.zivitApp.Main.Main.MyViewPager>

这是我的堆栈跟踪:

 Process: com.daprlabs.aaron.swipedeck2, PID: 17841
                                                                               java.lang.RuntimeException: Unable to start activity ComponentInfo{com.daprlabs.aaron.swipedeck2/com.daprlabs.aaron.zivitApp.Main.Main}: android.view.InflateException: Binary XML file line #35: Binary XML file line #35: Error inflating class com.daprlabs.aaron.zivitApp.Main.Main.MyViewPager
                                                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434)
                                                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
                                                                                   at android.app.ActivityThread.access$900(ActivityThread.java:157)
                                                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                   at android.os.Looper.loop(Looper.java:148)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5525)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
                                                                                Caused by: android.view.InflateException: Binary XML file line #35: Binary XML file line #35: Error inflating class com.daprlabs.aaron.zivitApp.Main.Main.MyViewPager
                                                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                                                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                                                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                                                                                   at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
                                                                                   at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:143)
                                                                                   at com.daprlabs.aaron.zivitApp.Main.Main.onCreate(Main.java:49)
                                                                                   at android.app.Activity.performCreate(Activity.java:6272)
                                                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
                                                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                                                                                   at android.app.ActivityThread.access$900(ActivityThread.java:157) 
                                                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                   at android.os.Looper.loop(Looper.java:148) 
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5525) 
                                                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
                                                                                Caused by: android.view.InflateException: Binary XML file line #35: Error inflating class com.daprlabs.aaron.zivitApp.Main.Main.MyViewPager
                                                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776)
                                                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                                                                                   at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
                                                                                   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
                                                                                   at android.view.LayoutInflater.rInflate(LayoutInflater.java:838)
                                                                                   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
                                                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
                                                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                                                                                   at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284) 
                                                                                   at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:143) 
                                                                                   at com.daprlabs.aaron.zivitApp.Main.Main.onCreate(Main.java:49) 
                                                                                   at android.app.Activity.performCreate(Activity.java:6272) 
                                                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                                                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387) 
                                                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                                                                                   at android.app.ActivityThread.access$900(ActivityThread.java:157) 
                                                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                   at android.os.Looper.loop(Looper.java:148) 
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5525) 
                                                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
                                                                                Caused by: java.lang.ClassNotFoundException: Didn't find class "com.daprlabs.aaron.zivitApp.Main.Main.MyViewPager" on path: DexPathList[[zip file "/data/app/com.daprlabs.aaron.swipedeck2-1/base.apk"],nativeLibraryDirectories=[/data/app/com.daprlabs.aaron.swipedeck2-1/lib/arm64, /data/app/com.daprlabs.aaron.swipedeck2-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]
                                                                                   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                                                                                   at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
                                                                                   at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
                                                                                   at android.view.LayoutInflater.createView(LayoutInflater.java:583)
                                                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764)
                                                                                   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                                                                                   at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
                                                                                   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
                                                                                   at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) 
                                                                                   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
                                                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
                                                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                                                                                   at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284) 
                                                                                   at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:143) 
                                                                                   at com.daprlabs.aaron.zivitApp.Main.Main.onCreate(Main.java:49) 
                                                                                   at android.app.Activity.performCreate(Activity.java:6272) 
                                                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                                                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387) 
                                                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                                                                                   at android.app.ActivityThread.access$900(ActivityThread.java:157) 
                                                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                   at android.os.Looper.loop(Looper.java:148) 
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5525) 
                                                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
                                                                                Suppressed: java.lang.ClassNotFoundException: com.daprlabs.aaron.zivitApp.Main.Main.MyViewPager
                                                                                   at java.lang.Class.classForName(Native Method)
                                                                                   at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
                                                                                   at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
                                                                                   at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                                                                                        ... 26 more
                                                                                Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

已编辑

我的项目结构:

【问题讨论】:

  • 您是否尝试过清理和重建您的项目? (在Build下的标签栏中)
  • 你的层次结构对我来说很奇怪com.daprlabs.aaron.zivitApp.Main.Main.MyViewPager你能发布视图的层次结构吗?
  • 如何获得视图的层次结构?
  • 截图你的文件夹结构类似于this
  • @Enzokie 我刚刚添加了屏幕截图

标签: android android-layout android-fragments android-viewpager


【解决方案1】:

在我的评论中,我确实提到我们需要为视图创建一个单独的类,例如MyViewPager.java 因为我们不能在内部类中为视图充气,因为它依赖于其顶级类(充气机不适合这项工作,也不容易开发这种充气机),其他选项是将其声明为静态。

【讨论】:

  • 感谢您的回答。是的,这是一个真正的大满贯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多