Сбой приложения при настройке адаптера ViewPager - PullRequest
0 голосов
/ 26 декабря 2018

Недавно я обновил свое приложение на 6 языках, чтобы пользователи могли выбирать.Когда приложение впервые открывается, пользователю задают языковые предпочтения.Когда пользователь выбирает язык, его приветствует домашний экран.Пока все работает хорошо.

Теперь предположим, что пользователь хочет изменить язык.

Шаг 1 : - он / она может перейти к настройкам и изменить их.(Здесь возникает проблема)

Когда язык выбирается из настроек , пользователю предлагается перезапустить приложение (либо вручную, либо автоматически ).

При автоматическом перезапуске приложения происходит сбой приложения с журналом ниже -

Пожалуйста, проверьте ниже Logcat

> java.lang.IllegalArgumentException: Wrong state class, expecting View
> State but received class
> android.support.design.stateful.ExtendableSavedState instead. This
> usually happens when two views of different type have the same id in
> the same hierarchy. This view's id is id/arcMenu1. Make sure other
> views do not use the same id.

Полная информация Logcat

> java.lang.IllegalArgumentException: Wrong state class, expecting View
> State but received class
> android.support.design.stateful.ExtendableSavedState instead. This
> usually happens when two views of different type have the same id in
> the same hierarchy. This view's id is id/arcMenu1. Make sure other
> views do not use the same id.
>         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2455)
>         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2515)
>         at android.app.ActivityThread.access$1000(ActivityThread.java:154)
>         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
>         at android.os.Handler.dispatchMessage(Handler.java:102)
>         at android.os.Looper.loop(Looper.java:157)
>         at android.app.ActivityThread.main(ActivityThread.java:5571)
>         at java.lang.reflect.Method.invoke(Native Method)
>         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
>         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
>      Caused by: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class
> android.support.design.stateful.ExtendableSavedState instead. This
> usually happens when two views of different type have the same id in
> the same hierarchy. This view's id is id/arcMenu1. Make sure other
> views do not use the same id.
>         at android.view.View.onRestoreInstanceState(View.java:14811)
>         at android.view.View.dispatchRestoreInstanceState(View.java:14786)
>         at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3124)
>         at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3130)
>         at android.view.View.restoreHierarchyState(View.java:14764)
>         at android.support.v4.app.Fragment.restoreViewState(Fragment.java:494)
>         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1486)
>         at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
>         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
>         at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
>         at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
>         at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
>         at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:620)
>         at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
>         at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1238)
>         at android.app.Activity.performStart(Activity.java:6374)
>         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2418)

Итак, у меня есть домашний экран (Основная активность) с 6 вкладками (в пейджере просмотра).Одна из этих вкладок имеет Arc Menu.В журнале говорится, что идентификатор меню дуги использовался в нескольких местах.Я проверил, но это не так.

Эта ошибка обычно возникает, когда я пытаюсь сбросить ViewPager adapter, если он уже был установлен при первом запуске приложения.

ViewPager

Пожалуйста, проверьте код Для кода ViewPager -

 public void setupViewPager(final ViewPager viewPager) {

        final LayoutInflater inflater = LayoutInflater.from(this);
        final Resources res = getResources();

        if (storageUtil.loadTabs() == null || storageUtil.loadTabs().isEmpty())

            adapter.addFragment(new a(), getString(R.string.a), 0);
            adapter.addFragment(new b(), getString(R.string.b), 1);
            adapter.addFragment(new c(), getString(R.string.c), 2);
            adapter.addFragment(new d(), getString(R.string.d), 3);
            adapter.addFragment(new e(), getString(R.string.e), 4);
            adapter.addFragment(new f(), getString(R.string.f), 5);

        }


        if(storageUtil.loadTabs()!=null)
        viewPager.setOffscreenPageLimit(storageUtil.loadTabs().size());
        else viewPager.setOffscreenPageLimit(6);
        viewPager.setAdapter(adapter);
        smartTabLayout.setCustomTabView(new SmartTabLayout.TabProvider() {
            @Override
            public View createTabView(ViewGroup container, int position, PagerAdapter adapter) {
                View itemView = inflater.inflate(R.layout.custom_tab_icon, container, false);

                ImageView icon = itemView.findViewById(R.id.custom_tab_icon);
                switch (position) {

                    case 0:
                        icon.setImageDrawable(res.getDrawable(R.drawable.a));
                        break;
                    case 1:
                        icon.setImageDrawable(res.getDrawable(R.drawable.v));
                        break;
                    case 2:
                        icon.setImageDrawable(res.getDrawable(R.drawable.c));
                        break;
                    case 3:
                        icon.setImageDrawable(res.getDrawable(R.drawable.d));
                        break;
                    case 4:
                        icon.setImageDrawable(res.getDrawable(R.drawable.e));
                        break;
                    case 5:
                        icon.setImageDrawable(res.getDrawable(R.drawable.f));
                        break;
                    default:break;
                }

               return itemView;
            }
        });

        if(storageUtil.getHomeTab()==-1)
        viewPager.setCurrentItem(0);
        else viewPager.setCurrentItem(storageUtil.getHomeTab());
        setResideMenuEnabled(false);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            public void onPageScrollStateChanged(int state) {
            }

            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                int x = (int) ((viewPager.getWidth() * position + positionOffsetPixels) * computeFactor());
                scrollView.scrollTo(x, 0);
            }

            public void onPageSelected(int position) {
                if (position == 0) {
                    setResideMenuEnabled(true);
                    headerTextView.animateText(getString(R.string.a));

                } else if (position == 1) {

                    headerTextView.animateText(getString(R.string.v));
                    setResideMenuEnabled(false);
                } else if (position == 2) {

                    headerTextView.animateText(getString(R.string.c));
                    setResideMenuEnabled(false);
                } else if (position == 3) {

                    headerTextView.animateText(getString(R.string.d));
                    setResideMenuEnabled(false);
                } else if (position == 4) {

                    headerTextView.animateText(getString(R.string.e));
                    setResideMenuEnabled(false);
                } else if (position == 5) {

                    headerTextView.animateText(getString(R.string.f));
                    setResideMenuEnabled(false);
                }



            private float computeFactor() {
                return (viewPagerBackground.getWidth() - viewPager.getWidth()) /
                        (float) (viewPager.getWidth() * (viewPager.getAdapter().getCount() - 1));
            }

        });

        smartTabLayout.setViewPager(viewPager);

    }
}

Эта проблема существует со времени последнего обновления моего приложения.Я не знаю, как и почему, внезапно он появился из ниоткуда (хотя обновил android studio и испортил мои java-файлы. Android-студия не смогла распознать ни один из них как java-файлы).

PS - я не делаю никаких изменений в ориентации экрана

Это происходит потому, что при перезапуске приложения фрагменты не уничтожаются и создаются заново?

Есть идеи, что вызывает это?Заранее спасибо.

...