Java 如何修复ViewPager以防止应用程序出错和崩溃?

Java 如何修复ViewPager以防止应用程序出错和崩溃?,java,android,android-viewpager,Java,Android,Android Viewpager,我正在使用基于Androidhive教程的登录页面,问题是Viewpager可以使用2个布局,但3个布局的应用程序将崩溃 在androidhive教程中,我使用了2个布局,但我想使用3个布局,因为我得到的是短信,然后是otp,然后是注册,所以问题是第3个布局不会出现并崩溃 Androidhive教程链接: 代码如下: XML Logcat 08-29 10:48:12.426 4499-4499/ir.atlaspio.atlasdrinkingservice E/InputEventSen

我正在使用基于Androidhive教程的登录页面,问题是
Viewpager
可以使用2个布局,但3个布局的应用程序将崩溃
在androidhive教程中,我使用了2个布局,但我想使用3个布局,因为我得到的是短信,然后是otp,然后是注册,所以问题是第3个布局不会出现并崩溃

Androidhive教程链接:

代码如下:

XML

Logcat

08-29 10:48:12.426 4499-4499/ir.atlaspio.atlasdrinkingservice
E/InputEventSender:异常调度完成信号。 08-29 10:48:12.426 4499-4499/ir.atlaspio.atlasdrinkingservice E/MessageQueue JNI:MessageQueue回调中的异常: HandlerReceiveCallback 08-29 10:48:12.436 4499-4499/ir.atlaspio.atlasdrinkingservice E/MessageQueue JNI:java.lang.UnsupportedOperationException:必需 方法destroyItem未被重写 位于android.support.v4.view.PagerAdapter.destroyItem(PagerAdapter.java:201) 位于android.support.v4.view.PagerAdapter.destroyItem(PagerAdapter.java:128) 在android.support.v4.view.ViewPager.populate上(ViewPager.java:1172) 位于android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:663) 位于android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:625) 位于android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:617) 在android.support.v4.view.ViewPager.pageRight上(ViewPager.java:2888) 在android.support.v4.view.ViewPager.arrowScroll上(ViewPager.java:2844) 位于android.support.v4.view.ViewPager.executeKeyEvent(ViewPager.java:2764) 位于android.support.v4.view.ViewPager.dispatchKeyEvent(ViewPager.java:2738) 在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)上 在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)上 在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)上 在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)上 在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)上 在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)上 在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2035)上 在com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1505)上 位于android.app.Activity.dispatchKeyEvent(Activity.java:2418) 位于android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:534) 位于android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:58) 位于android.support.v7.app.AppCompateDelegateImplbase$AppCompateWindowCallBackbase.dispatchKeyEvent(AppCompateDelegateImplbase.java:316) 在com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1962)上 在android.view.ViewRootImpl$viewPostimeiInputStage.processKeyEvent(ViewRootImpl.java:3876)中 在android.view.ViewRootImpl$viewPostimeiInputStage.onProcess中(ViewRootImpl.java:3850) 在android.view.ViewRootImpl$InputStage.deliver上(ViewRootImpl.java:3423) 在android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3473)中 位于android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3442) 在android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3549)中 在android.view.ViewRootImpl$InputStage.apply上(ViewRootImpl.java:3450) 在android.view.ViewRootImpl$AsyncInputStage.apply上(ViewRootImpl.java:3606) 在android.view.ViewRootImpl$InputStage.deliver上(ViewRootImpl.java:3423) 在android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3473)中 位于android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3442) 在android.view.ViewRootImpl$InputStage.apply上(ViewRootImpl.java:3450) 在android.view.ViewRootImpl$InputStage.deliver上(ViewRootImpl.java:3423) 在android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3473)中 位于android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3442) 在android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3582)中 在android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3742)中 在android.view.inputmethod.InputMethodManager$PendingEvent.run上(InputMethodManager.java:2010) 在android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1704)中 在android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1695)中 在android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1987) 位于android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) 在android.os.MessageQueue.nativePollOnce(本机方法) 下一步(MessageQueue.java:138) 位于android.os.Looper.loop(Looper.java:123) 位于android.app.ActivityThread.main(ActivityThread.java:5019) 位于java.lang.reflect.Method.Invokenactive(本机方法) 在java.lang.reflect.Method.invoke(方法

根据你的错误

java.lang.UnsupportedOperationException:未重写必需的方法destroyItem

您需要在寻呼机适配器中添加此方法

@Override
void destroyItem (ViewGroup container, int position, Object object){
    ((ViewPager) container).removeView((View) object);
    // more code if needed
}

在您的
ViewPagerAdapter
类中重写
destroyItem
方法,并将obj作为
容器移除。移除视图(obj作为LinearLayout)
其中
LinearLayout
是您的根布局

@Override 
void destroyItem(ViewGroup container, int position, Object obj) {
            container.removeView(obj as LinearLayout)
        }

请提供您尝试执行此操作时提供的AndroidHive URL。看起来这是所需的问题。方法destroyItem未被覆盖显示您的第三层
@Override
void destroyItem (ViewGroup container, int position, Object object){
    ((ViewPager) container).removeView((View) object);
    // more code if needed
}
@Override 
void destroyItem(ViewGroup container, int position, Object obj) {
            container.removeView(obj as LinearLayout)
        }