У меня есть viewpager
с несколькими страницами, количество которых зависит от ответа. Каждый фрагмент имеет переработанное представление с элементами сетки. Похоже, при установке приложения Viewpager происходит сбой. Я не могу отследить, почему происходит cra sh и номер строки.
Код:
adapter = new NewCatPagerAdapter(getSupportFragmentManager(), categoriesResponse.categories);
for (int i = 0; i < categoriesResponse.categories.size(); i++) {
NewCategoriesFragment3 categoriesFragment = new NewCategoriesFragment3();
Bundle bundle = new Bundle();
bundle.putInt(IntentParams.CATEGORIES_POSITION, i);
bundle.putBoolean(IntentParams.IS_FOR_RESULT, isForResult);
bundle.putBoolean(IntentParams.IS_CROSS_BORDER, isCrossBorder);
categoriesFragment.setArguments(bundle);
adapter.addFragment(categoriesFragment);
}
setUpCategoryTitle(categoriesResponse.categories);
vpPager = findViewById(R.id.viewPager);
vpPager.setClipToPadding(false);
vpPager.setPageMargin(12);
vpPager.setOffscreenPageLimit(categoriesResponse.categories.size());
vpPager.setAdapter(adapter);
Stacktrace:
java.lang.IllegalStateException: Already attached
at androidx.fragment.app.FragmentManagerImpl.attachController(FragmentManagerImpl.java:2560)
at androidx.fragment.app.Fragment.performAttach(Fragment.java:2553)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:828)
at androidx.fragment.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1197)
at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1080)
at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:119)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1863)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1821)
at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManagerImpl.java:1696)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:299)
at androidx.fragment.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:256)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
at android.view.View.measure(View.java:25086)
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1185)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:723)
at android.view.View.measure(View.java:25086)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6872)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:25086)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6872)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:25086)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6872)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
at android.view.View.measure(View.java:25086)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6872)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:25086)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6872)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:25086)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6872)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:25086)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6872)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:742)
at android.view.View.measure(View.java:25086)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3083)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1857)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2146)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1745)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7768)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:967)
at android.view.Choreographer.doCallbacks(Choreographer.java:791)
at android.view.Choreographer.doFrame(Choreographer.java:726)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
NewCatPagerAdapter:
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import java.util.ArrayList;
import java.util.List;
// Extend from SmartFragmentStatePagerAdapter now instead for more dynamic ViewPager items
public class NewCatPagerAdapter extends FragmentStatePagerAdapter {
private static int NUM_ITEMS = 2;
private ArrayList<Fragment> mFragmentList = new ArrayList<>();
private List<Category> titleList = new ArrayList<>();
public NewCatPagerAdapter(FragmentManager fragmentManager, List<Category> titleList) {
super(fragmentManager);
this.titleList = titleList;
}
// Returns total number of pages
@Override
public int getCount() {
return mFragmentList.size();
}
// Returns the fragment to display for that page
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
public void addFragment(Fragment fragment) {
mFragmentList.add(fragment);
}
// Returns the page title for the top indicator
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position).displayName;
}
}