Недавно я обновил свое приложение на 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 - я не делаю никаких изменений в ориентации экрана
Это происходит потому, что при перезапуске приложения фрагменты не уничтожаются и создаются заново?
Есть идеи, что вызывает это?Заранее спасибо.