Skip to content

Stack Overflow when setting data #24

@danielevitali

Description

@danielevitali

I am getting this exception

java.lang.StackOverflowError
            at com.lykehq.ui.home.teasers.BannersAdapter.getCount(BannersAdapter.java:69)
            at com.lykehq.views.loopviewpager.LoopPagerAdapterWrapper.getRealCount(LoopPagerAdapterWrapper.java:102)
            at com.lykehq.views.loopviewpager.LoopPagerAdapterWrapper.toRealPosition(LoopPagerAdapterWrapper.java:69)
            at com.lykehq.views.loopviewpager.LoopViewPager$1.onPageScrolled(LoopViewPager.java:151)
            at android.support.v4.view.ViewPager.dispatchOnPageScrolled(ViewPager.java:1769)
            at android.support.v4.view.ViewPager.onPageScrolled(ViewPager.java:1748)
            at android.support.v4.view.ViewPager.pageScrolled(ViewPager.java:1670)
            at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:576)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:513)
            at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:505)
            at com.lykehq.views.loopviewpager.LoopViewPager.setCurrentItem(LoopViewPager.java:101)
            at com.lykehq.views.loopviewpager.LoopViewPager$1.onPageScrolled(LoopViewPager.java:156)
            at android.support.v4.view.ViewPager.dispatchOnPageScrolled(ViewPager.java:1769)
            at android.support.v4.view.ViewPager.onPageScrolled(ViewPager.java:1748)
            at android.support.v4.view.ViewPager.pageScrolled(ViewPager.java:1670)
            at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:576)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:513)
            at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:505)
            at com.lykehq.views.loopviewpager.LoopViewPager.setCurrentItem(LoopViewPager.java:101)
            at com.lykehq.views.loopviewpager.LoopViewPager$1.onPageScrolled(LoopViewPager.java:156)
            at android.support.v4.view.ViewPager.dispatchOnPageScrolled(ViewPager.java:1769)
            at android.support.v4.view.ViewPager.onPageScrolled(ViewPager.java:1748)
            at android.support.v4.view.ViewPager.pageScrolled(ViewPager.java:1670)
            at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:576)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:513)
            at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:505)
            at com.lykehq.views.loopviewpager.LoopViewPager.setCurrentItem(LoopViewPager.java:101)
            at com.lykehq.views.loopviewpager.LoopViewPager$1.onPageScrolled(LoopViewPager.java:156)
            at android.support.v4.view.ViewPager.dispatchOnPageScrolled(ViewPager.java:1769)
            at android.support.v4.view.ViewPager.onPageScrolled(ViewPager.java:1748)
            at android.support.v4.view.ViewPager.pageScrolled(ViewPager.java:1670)
            at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:576)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:513)
            at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:505)
            at com.lykehq.views.loopviewpager.LoopViewPager.setCurrentItem(LoopViewPager.java:101)
            at com.lykehq.views.loopviewpager.LoopViewPager$1.onPageScrolled(LoopViewPager.java:156)
            at android.support.v4.view.ViewPager.dispatchOnPageScrolled(ViewPager.java:1769)
            at android.support.v4.view.ViewPager.onPageScrolled(ViewPager.java:1748)
            at android.support.v4.view.ViewPager.pageScrolled(ViewPager.java:1670)
            at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:576)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:513)
            at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:505)
            at com.lykehq.views.loopviewpager.LoopViewPager.setCurrentItem(LoopViewPager.java:101)
            at com.lykehq.views.loopviewpager.LoopViewPager$1.onPageScrolled(LoopViewPager.java:156)

The LoopViewPager is the first element inside a RecyclerView which is inside a Fragment which is inside a ViewPager along with other 3 Fragment.

So when my Activity starts, I make a request to my backend, while I am waiting I swipe around the 4 fragments and then suddenly the app crashes. This doesn't happen always unfortunately.

If I use a normal ViewPager everything looks fine.

Here is my adapter

public class BannersAdapter extends PagerAdapter {

    private Context context;
    private List<Teaser> teasers;
    private AdapterListener listener;

    public BannersAdapter(@NonNull Context context, @NonNull AdapterListener listener) {
        this.context = context;
        this.listener = listener;
    }

    public void setTeasers(@NonNull List<Teaser> teasers) {
        this.teasers = teasers;
        notifyDataSetChanged();
    }

    @Override
    public Object instantiateItem(ViewGroup collection, final int position) {
        ImageView imageView = new ImageView(context);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Teaser teaser = (Teaser) view.getTag(R.id.view_holder_tag);
                listener.onTeaserClick(teaser);
            }
        });
        collection.addView(imageView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

        Teaser teaser = teasers.get(position);
        imageView.setTag(R.id.view_holder_tag, teaser);

        int width = DisplayUtils.getDisplaySize(context)[0];
        String imageUrl = teaser.getImage().getUrl(width);
        Glide.with(context).load(imageUrl).into(imageView);

        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
        collection.removeView((View) view);
    }

    @Override
    public int getCount() {
        if (teasers == null) {
            return 0;
        }
        LogUtils.d("TEST", String.valueOf(teasers.size()));
        return teasers.size();
    }

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

    public interface AdapterListener {

        void onTeaserClick(@NonNull Teaser teaser);

    }

I am also using the page indicator from Jake Wharton:

bannersAdapter = new BannersAdapter(context, this);
        bannersViewPager.setAdapter(bannersAdapter);
        pageIndicator.setViewPager(bannersViewPager);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions