当前位置: 首页 > 知识库问答 >
问题:

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

西门靖琪
2023-03-14

我正在登录页面上工作,基于Androidhive教程和问题是Viewpager在2布局下工作正常,但对于3布局应用程序将崩溃。
在androidhive教程中使用了2布局,但我想使用3,因为我收到短信然后otp然后注册,所以问题是3rd布局,它不会出现并崩溃。

Androidhive教程链接:第1部分第2部分

以下是代码:

XML

    <LinearLayout
        android:id="@+id/layout_phone_registration"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <ImageView
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="25dp"
            android:layout_marginTop="100dp"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="25dp"
            android:gravity="center_horizontal"
            android:inputType="textCapWords"
            android:paddingLeft="40dp"
            android:paddingRight="40dp"
            android:text="@string/msg_enter_mobile"
            android:textColor="@android:color/white"
            android:textSize="14dp" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">


            <EditText
                android:id="@+id/inputMobile"
                android:layout_width="240dp"
                android:layout_height="wrap_content"
                android:background="@android:color/white"
                android:fontFamily="sans-serif-light"
                android:hint="@string/lbl_mobile"
                android:inputType="phone"
                android:maxLength="12"
                android:padding="5dp"
                android:textColor="@color/colorPrimary"
                android:textCursorDrawable="@null"
                android:textSize="18dp" />

            <Button
                android:id="@+id/btn_request_sms"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="25dp"
                android:background="@color/colorPrimaryDark"
                android:text="@string/lbl_next"
                android:textColor="@android:color/white"
                android:textSize="14dp" />
        </LinearLayout>


    </LinearLayout>

    <LinearLayout
        android:id="@+id/layout_otp"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/colorPrimary"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <ImageView
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="25dp"
            android:layout_marginTop="100dp"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:gravity="center_horizontal"
            android:paddingLeft="40dp"
            android:paddingRight="40dp"
            android:text="@string/msg_sit_back"
            android:textColor="@android:color/white"
            android:textSize="16dp" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="25dp"
            android:gravity="center_horizontal"
            android:paddingLeft="40dp"
            android:paddingRight="40dp"
            android:text="@string/msg_manual_otp"
            android:textColor="@android:color/white"
            android:textSize="12dp" />

        <EditText
            android:id="@+id/inputOtp"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:background="@android:color/white"
            android:fontFamily="sans-serif-light"
            android:gravity="center_horizontal"
            android:hint="@string/lbl_enter_otp"
            android:inputType="number"
            android:maxLength="6"
            android:padding="10dp"
            android:textCursorDrawable="@null"
            android:textSize="18dp" />

        <Button
            android:id="@+id/btn_verify_otp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="25dp"
            android:background="@color/colorPrimaryDark"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:text="@string/lbl_submit"
            android:textColor="@android:color/white"
            android:textSize="14dp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/layout_complete_registration"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:gravity="center_horizontal"
        android:orientation="vertical">


            <EditText
                android:id="@+id/inputName"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="15dp"
                android:background="@android:color/white"
                android:fontFamily="sans-serif-light"
                android:hint="@string/lbl_name"
                android:padding="5dp"
                android:singleLine="true"
                android:textColor="@color/colorPrimary"
                android:textSize="18dp" />

            <EditText
                android:id="@+id/inputAddress"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="15dp"
                android:background="@android:color/white"
                android:fontFamily="sans-serif-light"
                android:hint="@string/lbl_email"
                android:padding="5dp"
                android:textColor="@color/colorPrimary"
                android:textSize="18dp" />


            <Button
                android:id="@+id/btn_register_user"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="25dp"
                android:background="@color/colorPrimaryDark"
                android:text="@string/lbl_next"
                android:textColor="@android:color/white"
                android:textSize="14dp" />


    </LinearLayout>

</ir.atlaspio.atlasdrinkingservice.AdvancedUI.MyViewPager>>


<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center"
    android:layout_marginBottom="60dp"
    android:indeterminateTint="@color/colorAccent"
    android:indeterminateTintMode="src_atop"
    android:visibility="gone" />

<LinearLayout
    android:id="@+id/layout_edit_mobile"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="50dp"
    android:gravity="center"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/txt_edit_mobile"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:textSize="16dp" />

    <ImageButton
        android:id="@+id/btn_edit_mobile"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_marginLeft="10dp"
        android:background="@null"
        android:src="@drawable/ic_exit_to_app_black_24dp" />
</LinearLayout>

Java

private ViewPager viewPager;
private ViewPagerAdapter adapter;
OnCreate =>
viewPager.setCurrentItem(0);


    adapter = new ViewPagerAdapter();
    viewPager.setAdapter(adapter);
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int position) {
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
Public Class Activity =>
class ViewPagerAdapter extends PagerAdapter {

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((View) object);
    }

    public Object instantiateItem(View collection, int position) {

        int resId = 0;
        switch (position) {
            case 0:
                resId = R.id.layout_phone_registration;
                break;
            case 1:
                resId = R.id.layout_otp;
                break;
            case 2:
                resId = R.id.layout_complete_registration;
                break;
        }
        return findViewById(resId);
    }
}

Logcat

08-29 10:48:12.426 4499-4499/ir.atlaspio.atlasdrinkingservice
E/InputEventSender:异常调度完成信号。08-29 10:48:12.426 4499-4499/ViewPager.java:2764E/MessageQueue-JNI:异常在MessageQueue回调: handleReceiveCallback 08-29 10:48:12.436 4499-4499/android.support.v4.view.ViewPager.dispatchKeyEventE/MessageQueue-JNI: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(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(ir.atlaspio.atlasdrinkingservice)在ir.atlaspio.atlasdrinkingservice(java.lang.UnsupportedOperationException)在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(ViewGroup. java: 1408)在android. view. Viewp. GrouchKeyEvent(ViewGroup. java: 1408)在com. android. interal. Policy. pl. PhoneWindow$DecorView. superDispatchKeyEvent(PhoneWindow. java: 2035)在com. android. interal. Policy. pl在android. view. ViewRootImpl$ViewPostImeInputStage. ProcKeyEvent(ViewRootImpl. java: 3876)在android. view. ViewRootImpl$ViewPostImeInputStage. onProcess(ViewRootImpl. java: 3850)在android. view. ViewRootImpl$InputStage.交付(ViewRootImpl. java: 3423)在android. view. ViewRootImpl$InputStage. onDeliverToNext(ViewRootImpl. java: 3473)在android. view. ViewRootImpl$InputStage.转发(ViewRootImpl. java: 3442)在android. view. ViewRootImpl$AsyncInputStage.转发(ViewRootInput. java: 35MessageQueue. java: 138)在android. os. Looper. cle(Looper. java: 123)在android. app. ActivityThread. main(ActivityThread. java: 5019)在java. lang.反射。方法。调用本机方法)在java. lang.反射。方法。调用(方法。

共有2个答案

池恩
2023-03-14

在< code>ViewPagerAdapter类中重写< code>destroyItem方法,并将obj作为< code > container . remove view(obj as linear layout)移除,其中< code>LinearLayout是您的根布局

@Override 
void destroyItem(ViewGroup container, int position, Object obj) {
            container.removeView(obj as LinearLayout)
        }
郤浩慨
2023-03-14

根据你的错误

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

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

@Override
void destroyItem (ViewGroup container, int position, Object object){
    ((ViewPager) container).removeView((View) object);
    // more code if needed
}
 类似资料:
  • 即使在谷歌搜索了几个小时后,我也无法找出确切的问题。我已经检查了StackOverflow本身的几个答案,但未能找出问题所在。 错误跟踪如下: 主要活动代码: 更新1:我已经做了答案中建议的所有更改,但每当我单击MainActivity中的“跳过指令”按钮时,我的应用程序仍然崩溃。此外,当我从AdminLogin活动中单击“登录”按钮时,应用程序崩溃。我该怎么办? Update2:我提到了什么是N

  • 我让我的学长给我解释,他说, 这是为了防止生产中的崩溃。 我完全不同意。对我来说,这不是防止应用程序崩溃的方法。这表明开发人员不知道他/她在做什么,并有疑问。 由于这个问题得到了很多关注,有些人误解了这个问题(可能是因为我没有清楚地表达它),我打算重新表达它。 以下是开发人员在这里所做的 > 编写并测试一个函数,它可以是一个只是初始化视图的小函数,也可以是一个复杂的函数,测试后它被包裹在块中。即使

  • 当我在1到9之间选择一个数字并在控制台中输入一个数字时,该方法会工作并进行正确的移动。但我的问题是如何避免当我输入一个字母而不是一个数字时,程序就崩溃了。

  • 它给出:内部服务器错误,当我尝试访问网站/管理员或任何其他应用程序尝试使用heroku部署我的应用程序。 这是heroku的日志: 文件“/app/.heroku/python/lib/python3.6/site packages/django/utils/functional.py”,第125行,在_ cast 2019-05-08T15:15:47.484058 00:00应用程序[web.

  • 当用户按下注册按钮并将值传递给HomeActivity.java时,我试图从数据库(在LoginActivity.java上创建)传递变量。在我使用意图附加和捆绑之前,代码工作正常(除了传递变量)。但是当我把新代码,应用程序崩溃后,立即我按下注册按钮 我试图寻找另一个可能的重复问题,但没有一个问题与我的问题相同。他们中的大多数人忘了把活动放在android清单上,但我把LoginActivity放

  • 问题内容: 我一直在开发一个Android应用程序,该应用程序经常使用以防止它崩溃,即使在不需要的地方也是如此。例如, 在视图与被引用,如: 在整个应用程序中都使用这种方法。堆栈跟踪没有打印出来,很难找到问题所在。该应用程序突然关闭而不打印任何堆栈跟踪。 我请我的长辈向我解释一下,他说: 这是为了防止生产崩溃。 我完全不同意 。对我来说,这不是防止应用程序崩溃的方法。它表明开发人员 不 知道自己在