Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.IllegalStateException:片段已处于活动状态_Java_Android_Android Fragments_Android Viewpager - Fatal编程技术网

java.lang.IllegalStateException:片段已处于活动状态

java.lang.IllegalStateException:片段已处于活动状态,java,android,android-fragments,android-viewpager,Java,Android,Android Fragments,Android Viewpager,我正在使用ViewPager和fragments创建一个演练活动,我已经成功创建了演练,但问题是,我只能向前滑动,如果我尝试向后滑动应用程序崩溃,我尝试在另一个测试应用程序上复制它,该应用程序前后都能正常工作,虽然这一个使用TextView,而这一个使用ImageView 我需要帮助找出为什么它在向后滑动时崩溃 public class WalkThroughActivity extends AppCompatActivity { ViewPager mPager; Linea

我正在使用ViewPager和fragments创建一个演练活动,我已经成功创建了演练,但问题是,我只能向前滑动,如果我尝试向后滑动应用程序崩溃,我尝试在另一个测试应用程序上复制它,该应用程序前后都能正常工作,虽然这一个使用TextView,而这一个使用ImageView

我需要帮助找出为什么它在向后滑动时崩溃

public class WalkThroughActivity extends AppCompatActivity {

    ViewPager mPager;
    LinearLayout mLinearLayout;
    CustomPagerAdapter mAdapter;
    MyPageIndicator mIndicator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_walk_through);

        mPager = (ViewPager) findViewById(R.id.pager);
        mLinearLayout = (LinearLayout) findViewById(R.id.pagesContainer);
        List < Fragment > fragments = new ArrayList < >();
        fragments.add(ContentFragment.newInstance(R.drawable.walkthrough_card_1));
        fragments.add(ContentFragment.newInstance(R.drawable.walkthrough_card_2));
        fragments.add(ContentFragment.newInstance(R.drawable.walkthrough_card_3));

        mAdapter = new CustomPagerAdapter(getSupportFragmentManager(), fragments);
        mPager.setAdapter(mAdapter);
        mIndicator = new MyPageIndicator(this, mLinearLayout, mPager, R.drawable.indicator_circle);
        mIndicator.setPageCount(fragments.size());
        mIndicator.show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mIndicator.cleanup();
    }

    static class CustomPagerAdapter extends FragmentStatePagerAdapter {

        List < Fragment > mFrags = new ArrayList < >();

        public CustomPagerAdapter(FragmentManager fm, List < Fragment > frags) {
            super(fm);
            mFrags = frags;
        }

        @Override
        public Fragment getItem(int position) {
            int index = position % mFrags.size();
            return mFrags.get(index);
        }

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

    }
}
错误日志

FATAL EXCEPTION: main
    Process: com.simpumind.shoopa, PID: 8207
        java.lang.IllegalStateException: Fragment already active
            at android.support.v4.app.Fragment.setInitialSavedState(Fragment.java:576)
            at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:114)
            at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1034)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:1216)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
            at android.support.v4.view.ViewPager$3.run(ViewPager.java:273)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
            at android.view.Choreographer.doCallbacks(Choreographer.java:670)
            at android.view.Choreographer.doFrame(Choreographer.java:603)
            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:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我相信有冒犯性的代码行是

@覆盖
公共片段getItem(int位置){
int index=位置%mFrags.size();
返回mFrags.get(索引);
}
@凌驾
public int getCount(){
返回Integer.MAX_值;
}
我不确定你想实现什么,但这段代码非常糟糕。它使
ViewPager
相信您拥有的片段比实际拥有的要多得多,并多次重复使用同一片段。假设
mFrags.size()
为2,而
ViewPager
请求#0、#1和#2-您将返回片段#0两次,
ViewPager
可能会尝试将同一片段通过生命周期两次。片段的这种重复使用很可能是您看到的异常的根源

顺便问一下,直截了当有什么不对

@覆盖
公共片段getItem(int位置){
返回mFrags.get(位置);
}
@凌驾
public int getCount(){
返回mFrags.size();
}

我认为有问题的代码行是

@覆盖
公共片段getItem(int位置){
int index=位置%mFrags.size();
返回mFrags.get(索引);
}
@凌驾
public int getCount(){
返回Integer.MAX_值;
}
我不确定你想实现什么,但这段代码非常糟糕。它使
ViewPager
相信您拥有的片段比实际拥有的要多得多,并多次重复使用同一片段。假设
mFrags.size()
为2,而
ViewPager
请求#0、#1和#2-您将返回片段#0两次,
ViewPager
可能会尝试将同一片段通过生命周期两次。片段的这种重复使用很可能是您看到的异常的根源

顺便问一下,直截了当有什么不对

@覆盖
公共片段getItem(int位置){
返回mFrags.get(位置);
}
@凌驾
public int getCount(){
返回mFrags.size();
}

你能分享你的ContentFragment.newInstance(…)函数吗?@Cochi我添加了它,你能分享你的ContentFragment.newInstance(…)函数吗?@Cochi我添加了它,你是对的,那是罪魁祸首,我使用了直截了当的方法,谢谢。你是对的,那是罪魁祸首,我使用了直截了当的方法,它成功了,谢谢。
FATAL EXCEPTION: main
    Process: com.simpumind.shoopa, PID: 8207
        java.lang.IllegalStateException: Fragment already active
            at android.support.v4.app.Fragment.setInitialSavedState(Fragment.java:576)
            at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:114)
            at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1034)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:1216)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
            at android.support.v4.view.ViewPager$3.run(ViewPager.java:273)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
            at android.view.Choreographer.doCallbacks(Choreographer.java:670)
            at android.view.Choreographer.doFrame(Choreographer.java:603)
            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:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)