Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stack Overflow when setting data #24

Open
danielevitali opened this issue Sep 9, 2015 · 0 comments
Open

Stack Overflow when setting data #24

danielevitali opened this issue Sep 9, 2015 · 0 comments

Comments

@danielevitali
Copy link

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);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant