使用TabLayout和ViewPager时,应用程序在tab2上的后退崩溃
我有一个名为Manage Rules的片段,并且我为每个TabLayout项目使用TabLayout和ViewPager。每个传呼机上都有2个按钮。当我点击Tab2中的一个按钮时,它会调用一个新的片段,然后我按回去,它会崩溃。我不知道如何解决这个问题,因为Tab1中的相同按钮在我按回时工作。使用TabLayout和ViewPager时,应用程序在tab2上的后退崩溃
Screenshoot of Manage Rules Fragment
我的管理规则片段代码:
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];
}
}
}
我的错误logcat的。我粘贴这里:http://pastebin.com/gty3e2ts
12月1日至9日:32:35.139 11642-11642/victory1908.nlbstafflogin2 E/InputEventSender:异常分派成品信号。 E/MessageQueue-JNI:MessageQueue回调中的异常:handleReceiveCallback 01-09 12:32:35.149 11642-11642/victory1908.nlbstafflogin2 E/MessageQueue-JNI: java.lang.IndexOutOfBoundsException:无效的索引1,大小为0在java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)上的 at android.support java.util.ArrayList.get(ArrayList.java:308) .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) 在android.view.View.dispatchRestoreInstanceState(View.java:14831) 在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3183) 在android.view.ViewGroup。 dispatchRestoreInstanceState(ViewGroup.java:3189) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3189) at android.view.View.restoreHierarchyState(View.ja va: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 android.view.KeyEvent.dispatch(KeyEvent.java:3171) 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) 在android.support.v7.app.AppCompatDelegateImplBase $ AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:224) 在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) 在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.InputMeth odManager.invokeFinishedInputEventCallback(InputMethodManager.java:2074) 在android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2065) 在android.view.inputmethod.InputMethodManager $ ImeInputEventSender.onInputEventFinished(输入 01-09 12:32 :35.149 11642-11642/victory1908.nlbstafflogin2 D/AndroidRuntime:关闭VM 01-09 12:32:35.149 11642-11642/victory1908.nlbstafflogin2 E/AndroidRuntime:致命例外:主要 进程:victory1908.nlbstafflogin2,PID:11642 java.lang.IndexOutOfBoundsException:索引1无效,大小为0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 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) 在android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1320) 在android.view.View.dispatchRestoreInstanceState(查看。的java:14831) 在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3183) 在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3189) 在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: 3189) at android.support.v4.app.FragmentManagerImpl android.view.v4.app.Fragment.restoreViewState(Fragment.java:468) android.view.View.restoreHierarchyState(View.java:14809) 。 moveToState(FragmentManager.java:1094) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.p opFromBackStack(BackStackRecord.java:958) 在android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1666) 在android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:586) 在android.app.Activity.onKeyUp(Activity.java:2576)在android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:169) at victory1908.nlbstafflogin2.MainActivity.onBackPressed(MainActivity.java:132) at android.app.Activity.onKeyUp 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) 在android.support.v7.app.AppCompatDelegateImplBase $ AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:224) 在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.java:4598) at android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:4129) 在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) 在android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2065) 在android.view.inputmeth
请帮助。如果您需要其他文件,请发表评论。
如果你有这样一行:
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());
}
});
你得到一个崩溃(IndexOutOfBounds )可能是因为某处您尝试使用无效索引在视图寻呼机或tabLayout上设置当前位置(当前选定的项目)。你可以附上ManageEventAssigned的代码吗?
如果发生崩溃,请发布堆栈跟踪。 –
堆栈跟踪将有所帮助 –
对不起,但我不能在这里复制任何logcat。因为我的logcat屏幕现在是空白的。试图解决这个问题。 – TruongHieu