android - "java.lang.IllegalStateException: Can' 使用 ViewPager#setCurrentItem() 时 t 更改 fragment 标签”错误

标签 android android-viewpager fragment

我正在尝试使用 ViewPager + FragmentPagerAdapter 切换 fragment 。 我目前使用的是最新的 Android 支持包 v4

我的应用程序中有 5 个选项卡。当我选择第 4 个选项卡时,应用程序突然退出并显示“无法更改 fragment 标签 ~~”。

我没有尝试替换包含在布局 xml 文件中的 Fragment,所以我无法找出原因。

错误发生的代码如下:

@Override
public void onTabSelected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {
    // When the given tab is selected, switch to the corresponding page in
    // the ViewPager.
    mViewPager.setCurrentItem(tab.getPosition());
}

下面是我正在使用的 FragmentPagerAdapter 的 fragment

@Override
    public Fragment getItem(int i) {
        if (fragment_list.get(i) == null) {
            fragment_list.add(i, getFragment(i));
        }

        return fragment_list.get(i);
    }

    private Fragment getFragment(int index) {
        switch (index) {
        case TOP:
            return UseCaseListWithOptionFragment.newInstance(
                    URLHelper.USE_CASES_TOP_URL, R.array.comment);
        case FEED:
            int user_id = UserHelper.getCurrentUser(MainActivity.this).id;
            return UseCaseListFragment.newInstance(
                    URLHelper.getMyFeedsURL(user_id), true);
        case RECENT:
            return UseCaseListFragment.newInstance(
                    URLHelper.USE_CASES_RECENT_URL, true);
        case CATEOGORY:
            return UseCaseGroupListFragment.newInstance(
                    URLHelper.USE_CASE_GROUPS_URL, R.array.use_case);
        case MY:
            return UserProfileFragment.newInstance(UserHelper
                    .getCurrentUser(MainActivity.this));
        default:
            throw new IllegalStateException("Tab index out of bound.");
        }
    }

    @Override
    public int getCount() {
        return TAB_COUNT;
    }

下面是我遇到的错误日志:

08-04 17:51:55.983: E/AndroidRuntime(1112): FATAL EXCEPTION: main
08-04 17:51:55.983: E/AndroidRuntime(1112): java.lang.IllegalStateException: Can't change tag of fragment UseCaseGroupListFragment{4055f558 id=0x7f050034 android:switcher:2131034164:3}: was android:switcher:2131034164:3 now android:switcher:2131034164:4
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:356)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:347)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:99)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:692)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.support.v4.view.ViewPager.populate(ViewPager.java:875)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:469)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:441)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:422)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at org.everyuse.android.activity.MainActivity.onTabSelected(MainActivity.java:176)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at com.actionbarsherlock.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:526)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at com.actionbarsherlock.internal.app.ActionBarImpl$TabImpl.select(ActionBarImpl.java:907)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at com.actionbarsherlock.internal.widget.ScrollingTabContainerView$TabClickListener.onClick(ScrollingTabContainerView.java:503)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.view.View.performClick(View.java:2485)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.view.View$PerformClick.run(View.java:9080)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.os.Handler.handleCallback(Handler.java:587)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.os.Looper.loop(Looper.java:123)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at android.app.ActivityThread.main(ActivityThread.java:3683)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at java.lang.reflect.Method.invokeNative(Native Method)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at java.lang.reflect.Method.invoke(Method.java:507)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-04 17:51:55.983: E/AndroidRuntime(1112):     at dalvik.system.NativeStart.main(Native Method)

提前致谢...

最佳答案

我在错误地实现 getCount 方法时遇到了同样的异常。您是否检查过返回的尺寸是否正确?

@Override
public int getCount() {
    return 5;
}

关于android - "java.lang.IllegalStateException: Can' 使用 ViewPager#setCurrentItem() 时 t 更改 fragment 标签”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11810833/

相关文章:

Android 库项目和单元测试

java - 如何在android中将数据库中的数据显示为复选框列表

java - 如何根据另一个 Activity 设置按钮不可见

Android VideoView保存RTSP流

android - appcompat_v7 和 fragment_main.xml?

java - fragment 中 ListView 的游标

android - 对 ViewPager 的 PagerAdapter 有误解。 InstantianteItem 方法永远不会被调用

android - ViewPager destroyItem() [位置 1] 不工作

android - 使用 WebView 的 Jetpack 导航无法正常工作

java - 使用 Ajax 从 Spring Controller 加载 Modal 中的数据