gpt4 book ai didi

android - 使用TabLayout和ViewPager时,应用程序在选项卡2的后退按钮上崩溃

转载 作者:行者123 更新时间:2023-12-02 06:44:04 25 4
gpt4 key购买 nike

我有一个名为“管理规则”的片段,我正在为TabLayout的每个项目使用TabLayout和ViewPager。每个寻呼机上都有2个按钮。当我单击Tab2中的按钮时,它调用了一个新片段,然后我按回去,它崩溃了。我不知道如何解决此问题,因为当我按回去时,Tab1中的相同按钮起作用。

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];
}

}

}

我的错误日志。我在这里粘贴: 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



请帮忙。如果您需要其他文件,请发表评论。

最佳答案

如果您有此行:

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)的原因可能是因为您尝试在某处尝试使用无效索引在 View 分页器或tabLayout上设置当前位置(当前所选项目)。您可以附加ManageEventAssigned代码吗?

关于android - 使用TabLayout和ViewPager时,应用程序在选项卡2的后退按钮上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34689290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com