Skip to content
This repository has been archived by the owner on May 19, 2022. It is now read-only.

Can't find fragment by tag #2

Closed
vincentjames501 opened this issue Mar 21, 2016 · 2 comments
Closed

Can't find fragment by tag #2

vincentjames501 opened this issue Mar 21, 2016 · 2 comments
Labels

Comments

@vincentjames501
Copy link

When setting a OnSliderStateChangeListener and using a FragemtnPagerAdapter, getView() is puking because no fragment is being returned by id. Relying on internal API code such as "android:switcher:" + R.id.internal_pager_id + ":" + position is fragile and will break. Is the View object really necessary for the OnSliderStateChangeListener? It seems like position could suffice and maybe just make getPage public instead?

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.support.v4.app.Fragment.getView()' on a null object reference
                                                                 at com.telenav.expandablepager.ExpandablePager.getPage(ExpandablePager.java:241)
                                                                 at com.telenav.expandablepager.ExpandablePager.access$200(ExpandablePager.java:46)
                                                                 at com.telenav.expandablepager.ExpandablePager$1.onPageScrolled(ExpandablePager.java:92)
                                                                 at android.support.v4.view.ViewPager.dispatchOnPageScrolled(ViewPager.java:1845)
                                                                 at android.support.v4.view.ViewPager.onPageScrolled(ViewPager.java:1819)
                                                                 at android.support.v4.view.ViewPager.pageScrolled(ViewPager.java:1757)
                                                                 at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:633)
                                                                 at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1706)
                                                                 at android.view.View.layout(View.java:16636)
                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                 at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
                                                                 at android.view.View.layout(View.java:16636)
                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                 at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
                                                                 at android.view.View.layout(View.java:16636)
                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                 at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1695)
                                                                 at android.view.View.layout(View.java:16636)
                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
                                                                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
                                                                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
                                                                 at android.view.View.layout(View.java:16636)
                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                                                 at android.view.View.layout(View.java:16636)
                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
                                                                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
                                                                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
                                                                 at android.view.View.layout(View.java:16636)
                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                                                 at android.view.View.layout(View.java:16636)
                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
                                                                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
                                                                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
                                                                 at android.view.View.layout(View.java:16636)
                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                                                 at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)
                                                                 at android.view.View.layout(View.java:16636)
                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5437)
                                                                 at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171)
                                                                 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931)
                                                                 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
                                                                 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
                                                                 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                                                                 at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                                                                 at android.view.Choreographer.doFrame(Choreographer.java:606)
                                                                 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                 at android.os.Looper.loop(Looper.java:148)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:72
@vincentjames501
Copy link
Author

Also, getPage can be called with an index that is out of bounds.

java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3
                                                                         at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
                                                                         at java.util.ArrayList.get(ArrayList.java:308)
                                                                         at com.singlewire.cirrus.AreaOfInterestRecipientsFragment$1.getItem(AreaOfInterestRecipientsFragment.java:109)
                                                                         at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:105)
                                                                         at com.telenav.expandablepager.ExpandablePager.getPage(ExpandablePager.java:243)
                                                                         at com.telenav.expandablepager.ExpandablePager.access$200(ExpandablePager.java:46)
                                                                         at com.telenav.expandablepager.ExpandablePager$1.onPageScrolled(ExpandablePager.java:92)
                                                                         at android.support.v4.view.ViewPager.dispatchOnPageScrolled(ViewPager.java:1845)
                                                                         at android.support.v4.view.ViewPager.onPageScrolled(ViewPager.java:1819)
                                                                         at android.support.v4.view.ViewPager.pageScrolled(ViewPager.java:1757)
                                                                         at android.support.v4.view.ViewPager.performDrag(ViewPager.java:2261)
                                                                         at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:2153)
                                                                         at android.view.View.dispatchTouchEvent(View.java:9300)
                                                                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547)
                                                                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
                                                                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
                                                                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
                                                                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2575)
                                                                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
                                                                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
                                                                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
                                                                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
                                                                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
                                                                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
                                                                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
                                                                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
                                                                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
                                                                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
                                                                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
                                                                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
                                                                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
                                                                         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
                                                                         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
                                                                         at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
                                                                         at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
                                                                         at android.app.Activity.dispatchTouchEvent(Activity.java:2771)
                                                                         at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
                                                                         at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
                                                                         at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
                                                                         at android.view.View.dispatchPointerEvent(View.java:9520)
                                                                         at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230)
                                                                         at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096)
                                                                         at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
                                                                         at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
                                                                         at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
                                                                         at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787)
                                                                         at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
                                                                         at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844)
                                                                         at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
                                                                         at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
                                                                        at android.view.ViewRootImpl$InputStage.forward(ViewRootI

@dimatim
Copy link
Contributor

dimatim commented Mar 22, 2016

  • Since every fragment in a FragmentPagerAdapter is tagged by calling
private static String makeFragmentName(int viewId, long id) {
    return "android:switcher:" + viewId + ":" + id;
}

I don't see how it could break in the near future; unless there will be some drastic changes in the Android API...

Although, I guess it'll make more sense to get a fragment reference via
instantiateItem(container, position) since it's already used for FragmentStatePagerAdapter.

  • The idea behind passing a View in OnSliderStateChangeListener is that you can easily change / animate its content on a state change (as shown in the demo app).
  • getPage(index) is not intended to be a public method because it's main purpose is to return the current or neighboring page, in other words - pages that are most likely to be inflated by the ViewPager. I suppose I could add getCurrentPage() in the future, but i'm not sure whether it will be useful or not.

@dimatim dimatim added the bug label Mar 22, 2016
dimatim added a commit that referenced this issue Mar 22, 2016
@dimatim dimatim closed this as completed Mar 22, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

2 participants