2
votes

I have a fragment named Manage Rules and i am using TabLayout and ViewPager for each item of TabLayout. I have 2 buttons on each pager. When i clicked in a button in Tab2, it called a new fragment, then i pressed back, it crashed. I don't know how to fix this, because same button in Tab1 is work when i press back.

Screenshoot of Manage Rules Fragment

My Manage Rules Fragment code:

public class ManageRule extends BaseFragment {

public ManageRule() {
    // Required empty public constructor
}

TabLayout tabLayout;
ViewPager viewPager;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View viewFragment = inflater.inflate(R.layout.fragment_manage_rule, container, false);

    viewPager = (ViewPager) viewFragment.findViewById(R.id.viewPager);

    tabLayout = (TabLayout) viewFragment.findViewById(R.id.tabLayout);

    viewPager.setAdapter(new CustomAdapter(getChildFragmentManager(), getContext()));
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

    //        tabLayout.setupWithViewPager(viewPager);
    tabLayout.post(new Runnable() {
        @Override
        public void run() {
            tabLayout.setupWithViewPager(viewPager);
        }
    });

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }
    });

    if (ViewCompat.isLaidOut(tabLayout)) {
        tabLayout.setupWithViewPager(viewPager);
    } else {
        tabLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                tabLayout.setupWithViewPager(viewPager);
                tabLayout.removeOnLayoutChangeListener(this);
            }
        });
    }


    return viewFragment;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

}


//TabLayout and ViewPager class
private class CustomAdapter extends FragmentPagerAdapter {

    private String fragments[] = {"Assign Rules", "Manage Rules"};

    public CustomAdapter(FragmentManager fragmentManager, Context context) {
        super(fragmentManager);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new AssignEventToBeacon();
            case 1:
                //return new ManageEventAssigned();
                return new ManageEventAssigned();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return fragments.length;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return fragments[position];
    }

}

}

My Error logcat. I pasted here: http://pastebin.com/gty3e2ts

01-09 12:32:35.139 11642-11642/victory1908.nlbstafflogin2 E/InputEventSender: Exception dispatching finished signal. 01-09 12:32:35.139 11642-11642/victory1908.nlbstafflogin2 E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 01-09 12:32:35.149 11642-11642/victory1908.nlbstafflogin2 E/MessageQueue-JNI: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at android.support.design.widget.TabLayout.getTabAt(TabLayout.java:448) at android.support.design.widget.TabLayout$TabLayoutOnPageChangeListener.onPageSelected(TabLayout.java:1759) at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1794) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:548) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514) at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1320) at android.view.View.dispatchRestoreInstanceState(View.java:14831) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3183) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3189) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3189) at android.view.View.restoreHierarchyState(View.java:14809) at android.support.v4.app.Fragment.restoreViewState(Fragment.java:468) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1094) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:958) at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1666) at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:586) at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:169) at victory1908.nlbstafflogin2.MainActivity.onBackPressed(MainActivity.java:132) at android.app.Activity.onKeyUp(Activity.java:2576) at android.view.KeyEvent.dispatch(KeyEvent.java:3171) at android.app.Activity.dispatchKeyEvent(Activity.java:2831) at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:224) at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2438) at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4643) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4598) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4129) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4182) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4148) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4262) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4156) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4319) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4129) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4182) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4148) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4156) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4129) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4182) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4148) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4295) at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4482) at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2480) at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2074) at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2065) at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(Input 01-09 12:32:35.149 11642-11642/victory1908.nlbstafflogin2 D/AndroidRuntime: Shutting down VM 01-09 12:32:35.149 11642-11642/victory1908.nlbstafflogin2 E/AndroidRuntime: FATAL EXCEPTION: main Process: victory1908.nlbstafflogin2, PID: 11642 java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at android.support.design.widget.TabLayout.getTabAt(TabLayout.java:448) at android.support.design.widget.TabLayout$TabLayoutOnPageChangeListener.onPageSelected(TabLayout.java:1759) at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1794) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:548) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514) at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1320) at android.view.View.dispatchRestoreInstanceState(View.java:14831) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3183) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3189) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3189) at android.view.View.restoreHierarchyState(View.java:14809) at android.support.v4.app.Fragment.restoreViewState(Fragment.java:468) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1094) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:958) at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1666) at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:586) at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:169) at victory1908.nlbstafflogin2.MainActivity.onBackPressed(MainActivity.java:132) at android.app.Activity.onKeyUp(Activity.java:2576) at android.view.KeyEvent.dispatch(KeyEvent.java:3171) at android.app.Activity.dispatchKeyEvent(Activity.java:2831) at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:224) at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2438) at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4643) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4598) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4129) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4182) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4148) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4262) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4156) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4319) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4129) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4182) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4148) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4156) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4129) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4182) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4148) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4295) at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4482) at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2480) at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2074) at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2065) at android.view.inputmeth

Please help. If you need other files, please comment.

1
If it's crashing, post the stack trace. - Daniel Nugent
Stack trace would be helpful - Somasundaram Mahesh
Sorry but i cannot copy any logcat here. Because my logcat screen is blank now. Trying to fix this. - Truong Hieu

1 Answers

0
votes

If you have this line:

tabLayout.setupWithViewPager(viewPager);

you don't need to select the tab manually (this part of code could be removed):

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {
        viewPager.setCurrentItem(tab.getPosition());
    }
});

You get a crash (IndexOutOfBounds) probably because somewhere you try to set the current position (current selected item) on view pager or on tabLayout using an invalid index. Could you attach the code of ManageEventAssigned?