【发布时间】:2016-11-23 16:51:40
【问题描述】:
我使用ViewPager 在图像之间滑动。我的ViewPager 不使用任何Fragment。当我滑动到下一张图片时,我的应用程序崩溃并在 instantiateItem() 中发生异常。这是我的适配器类:
public class SlidePagerAdapter extends PagerAdapter {
LayoutInflater mLayoutInflater;
Context context;
int[] mResources = {
R.drawable.sports1,
R.drawable.sports2,
R.drawable.sports3,
};
public SlidePagerAdapter(Context context) {
this.context = context;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = mLayoutInflater.inflate(R.layout.viewpager, container, false);
ImageView imageView = (ImageView) itemView.findViewById(R.id.viewpager_image);
imageView.setImageResource(mResources[position]);
container.addView(imageView); // HERE MY APPLICATION CRASH
// container.addView(imageView, position);
return imageView;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public int getCount() {
return mResources.length;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(((View) object).getRootView());
}
}
以下是日志详细信息:
java.lang.IllegalStateException: 指定的孩子已经有一个 父母。您必须首先在孩子的父母上调用 removeView()。 在 android.view.ViewGroup.addViewInner(ViewGroup.java:3938) 在 android.view.ViewGroup.addView(ViewGroup.java:3788) 在 android.support.v4.view.ViewPager.addView(ViewPager.java:1413) 在 android.view.ViewGroup.addView(ViewGroup.java:3729) 在 mycompany.microfinance.SlidePagerAdapter.instantiateItem(SlidePagerAdapter.java:37) 在 android.support.v4.view.ViewPager.addNewItem(ViewPager.java:943) 在 android.support.v4.view.ViewPager.populate(ViewPager.java:1157) 在 android.support.v4.view.ViewPager.populate(ViewPager.java:1025) 在 android.support.v4.view.ViewPager$3.run(ViewPager.java:254) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 在 android.view.Choreographer.doCallbacks(Choreographer.java:580) 在 android.view.Choreographer.doFrame(Choreographer.java:549) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5343) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
我不知道如何解决它。我遵循了一个教程,我认为我遵循它是正确的。请帮助我找出我做错的地方。谢谢。
【问题讨论】:
-
onDestroyItem,只需删除
object。 -
FWIW,here is a sample activity 实现了无片段的
ViewPager。正如 Spitsin 先生所指出的,您的问题在于addView()/removeView()调用中的并行性。那些需要匹配;你的没有。