【发布时间】:2015-03-09 17:28:29
【问题描述】:
无论我应用了多少解决方案,我都无法摆脱这个错误。
************ 错误原因 ************ java.lang.IllegalStateException: Fragment b{4210f838} 当前不在 android.support.v4.app.ia(FragmentManager.java:603) 的 FragmentManager 中 android.support.v4.app.ja(FragmentStatePagerAdapter.java:136 ) 在 android.support.v4.view.ViewPager.b(ViewPager.java:874) 在 android.database.DataSetObservable.notifyChanged( DataSetObservable.java:37) at android.support.v4.view.kc(PagerAdapter.java:276) at com.xyz.Activity2$2.a(Activity2.java:351) at com.aad$1.onAnimationEnd(ParallelAnimator.java :73) 在 android.animation.AnimatorSet$AnimatorSetListener.onAnimationEnd(AnimatorSet.java:765) 在 android.animation.AnimatorSet$AnimatorSetListener.onAnimationEnd(AnimatorSet.java:765) 在 android.animation.ValueAnimator.endAnimation(ValueAnimator.java: 1018) 在 android.animation.ValueAnimator.access$400(ValueAnimator.java:51) 在 android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:623) 在一个droid.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:639) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 在 android.view.Choreographer.doCallbacks(Choreographer.java:555) 在 android .view.Choreographer.doFrame(Choreographer.java:524) 在 android.os.Handler.handleCallback(Handler.java:615) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 在 android.os。 Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:4898) 在 java.lang.reflect.Method.invokeNative (Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) at com.android.internal.os .ZygoteInit.main(ZygoteInit.java:773) at dalvik.system.NativeStart.main(Native Method)
我正在使用的代码:
public class PlaceSlidesFragmentAdapter extends FragmentStatePagerAdapter implements IconPagerAdapter {
private List<String> imgList;
Activity activity;
public PlaceSlidesFragmentAdapter(Activity act, FragmentManager fm) {
super(fm);
imgList = new ArrayList<String>();
activity= act;
}
public void addImage(String imgUrl)
{
imgList.add(imgUrl);
}
public void addAllImages()
{
for(All Image URLs)
{
addImage(s);
}
}
public void removeAllImages()
{
imgList.clear();
}
public String getImageName(int pos)
{
return imgList.get(pos);
}
@Override
public Fragment getItem(int position) {
return new PlaceSlideFragment(imgList.get(position));
}
@Override
public int getCount() {
return imgList.size();
}
@Override
public int getIconResId(int index) {
return 0;
}
@Override
public int getItemPosition(Object object){
return PagerAdapter.POSITION_NONE;
}
}
我在调用 onNotifyDataSetChanged() 时遇到错误。基本上我在一个活动中有这个viewpager,我在运行时动态添加/删除片段。使用这个:
mAdapter.removeAllImages();
mAdapter.addAllImages();
mAdapter.notifyDataSetChanged();
崩溃每天发生超过 20 次,每天大约有 500-700 个用户。我还不能在我的系统上重现它。如果您需要任何其他信息,请告诉我。
如果有人可以帮助解决这个问题。这将是一个很大的帮助。 谢谢
编辑:
// set-up image view-pager
mAdapter = new PlaceSlidesFragmentAdapter(this, getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
【问题讨论】:
-
尝试使用
getChildFragmentManager()而不是getFragmentManager()初始化ViewPager。让我知道这是否有效。 -
getChildFragmentManager() 是 Fragment 上的方法,而不是 FragmentActivity 上的方法。我正在fragmentActivity 下初始化viewpager。我在描述中添加了初始化代码。
-
这个问题会不会和活动恢复有关?尝试启用“销毁活动”的开发人员选项以重现它。此外,您不应该使用构造函数来实例化您的片段,而是使用静态创建者,就像在此示例中所做的 developer.android.com/reference/android/support/v4/app/…
-
这可能会有所帮助 >> [FragmentStatePagerAdapter][1] [1]: stackoverflow.com/questions/11296411/…
-
您好,您可以从调用 notifyDataSetChanged() 方法的位置发布代码吗?我想假设您是在动画结束后调用它的。只需从您调用它的位置发布代码。
标签: android android-fragments android-viewpager