我有一个VIEwPager,它是d出窗口的一部分.当我第一次打开d出窗口时,一切正常,但是当我第二次用相同的数据打开它时,我有一个IllegalStateException错误.
这是一个堆栈跟踪:
04-08 15:17:48.370: E/AndroidRuntime(10929): FATAL EXCEPTION: main
04-08 15:17:48.370: E/AndroIDRuntime(10929):
java.lang.IllegalStateException: The specifIEd child already has a
parent. You must call removeVIEw() on the child’s parent first. 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwGroup.addVIEwInner(VIEwGroup.java:3337) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwGroup.addVIEw(VIEwGroup.java:3208) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.support.v4.vIEw.VIEwPager.addVIEw(VIEwPager.java:920) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwGroup.addVIEw(VIEwGroup.java:3165) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwGroup.addVIEw(VIEwGroup.java:3145) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
com.componentix.imwizard.SamplePagerAdapter.instantiateItem(SamplePagerAdapter.java:22)
04-08 15:17:48.370: E/AndroIDRuntime(10929): at
androID.support.v4.vIEw.VIEwPager.addNewItem(VIEwPager.java:649) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:783) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.support.v4.vIEw.VIEwPager.completeScroll(VIEwPager.java:1280)
04-08 15:17:48.370: E/AndroIDRuntime(10929): at
androID.support.v4.vIEw.VIEwPager.computeScroll(VIEwPager.java:1176)
04-08 15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwGroup.drawChild(VIEwGroup.java:2729) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwGroup.dispatchDraw(VIEwGroup.java:2489) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEw.buildDrawingCache(VIEw.java:10693) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwGroup.drawChild(VIEwGroup.java:2747) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwGroup.dispatchDraw(VIEwGroup.java:2489) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEw.draw(VIEw.java:10981) 04-08 15:17:48.370:
E/AndroIDRuntime(10929): at
androID.vIEw.VIEw.getdisplayList(VIEw.java:10417) 04-08 15:17:48.370:
E/AndroIDRuntime(10929): at
androID.vIEw.VIEwGroup.dispatchGetdisplayList(VIEwGroup.java:2597)
04-08 15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEw.getdisplayList(VIEw.java:10380) 04-08 15:17:48.370:
E/AndroIDRuntime(10929): at
androID.vIEw.HarDWareRenderer$glrenderer.draw(HarDWareRenderer.java:842)
04-08 15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwRootImpl.draw(VIEwRootImpl.java:1910) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwRootImpl.performTraversals(VIEwRootImpl.java:1634)
04-08 15:17:48.370: E/AndroIDRuntime(10929): at
androID.vIEw.VIEwRootImpl.handleMessage(VIEwRootImpl.java:2442) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.os.Handler.dispatchMessage(Handler.java:99) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
androID.os.Looper.loop(Looper.java:137) 04-08 15:17:48.370:
E/AndroIDRuntime(10929): at
androID.app.ActivityThread.main(ActivityThread.java:4430) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
java.lang.reflect.Method.invokeNative(Native Method) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
java.lang.reflect.Method.invoke(Method.java:511) 04-08 15:17:48.370:
E/AndroIDRuntime(10929): at
com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
04-08 15:17:48.370: E/AndroIDRuntime(10929): at
com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:559) 04-08
15:17:48.370: E/AndroIDRuntime(10929): at
dalvik.system.NativeStart.main(Native Method)
这是我的代码:
public voID showPopupWindow(Drawable picture){ int imageResource = R.drawable.background; Drawable image = getResources().getDrawable(imageResource); popupLayout = new linearLayout(context); popupLayout.setorIEntation(linearLayout.VERTICAL); popupLayout.setBackgroundResource(R.drawable.background); LayoutInflater ltInflater = getLayoutInflater(); relativeLayout rl = (relativeLayout)ltInflater.inflate(R.layout.vIEwpager_layout, null); PagerContainer pagerContainer = (PagerContainer)(rl.getChildAt(0)); CirclePageIndicator circlePageIndicator = (CirclePageIndicator)(rl.getChildAt(1)); button button = (button)(rl.getChildAt(2)); int maxWIDth = 1; int maxHeight = 1; for (Drawable drawable: bigImages) { Bitmap bmp = drawabletoBitmap(drawable); maxWIDth = Math.max(maxWIDth, bmp.getWIDth()); maxHeight = Math.max(maxHeight, bmp.getHeight()); } VIEwPager vIEwPager = pagerContainer.getVIEwPager(); //vIEwPager.setBackgroundDrawable(image); ArrayList<ImageVIEw> tmpImageVIEwsWithScreenshots = (ArrayList<ImageVIEw>) imageVIEwsWithScreenshots.clone(); SamplePagerAdapter pagerAdapter = new SamplePagerAdapter(tmpImageVIEwsWithScreenshots); vIEwPager.setAdapter(pagerAdapter); vIEwPager.setCurrentItem(imageIndex); circlePageIndicator.setVIEwPager(vIEwPager); circlePageIndicator.setCurrentItem(imageIndex); button.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { int childCount = checkBoxLayout.getChildCount(); for (int i = 0; i < childCount; ++i) { relativeLayout currentLayout = (relativeLayout) checkBoxLayout .getChildAt(i); int innerChildCount = currentLayout .getChildCount(); for (int j = 0; j < innerChildCount; ++j) { VIEw vIEw = currentLayout.getChildAt(j); vIEw.setEnabled(true); } } imageVIEwLayout.setEnabled(true); lockableScrollVIEw.setmScrollable(true); back.setEnabled(true); next.setEnabled(true); popupWindow.dismiss(); } }); popupLayout.addVIEw(rl); linearLayout.LayoutParams nlp= new linearLayout.LayoutParams(450, 600); rl.setLayoutParams(nlp); popupWindow = new PopupWindow(popupLayout, relativeLayout.LayoutParams.WRAP_CONTENT, relativeLayout.LayoutParams.WRAP_CONTENT); int childCount = checkBoxLayout.getChildCount(); for (int i = 0; i < childCount; ++i) { relativeLayout currentLayout = (relativeLayout) checkBoxLayout .getChildAt(i); int innerChildCount = currentLayout.getChildCount(); for (int j = 0; j < innerChildCount; ++j) { VIEw vIEw = currentLayout.getChildAt(j); vIEw.setEnabled(false); } } next.setEnabled(false); back.setEnabled(false); imageVIEwLayout.setEnabled(false); lockableScrollVIEw.setmScrollable(false); popupWindow .showAtLocation(mainLayout, Gravity.CENTER, 0, 0); }
这是我的适配器的代码:
public class SamplePagerAdapter extends PagerAdapter{ List<ImageVIEw> pages = null; public SamplePagerAdapter(List<ImageVIEw> pages){ this.pages = pages; } @OverrIDe public Object instantiateItem(VIEwGroup container, int position){ VIEw v = pages.get(position); //((VIEwPager) collection).addVIEw(v, 0); container.addVIEw(v); return v; } @OverrIDe public voID destroyItem(VIEwGroup container, int position, Object object){ container.removeVIEw((VIEw)object); } @OverrIDe public int getCount(){ return pages.size(); } @OverrIDe public boolean isVIEwFromObject(VIEw vIEw, Object object){ return vIEw.equals(object); }}
有任何想法吗?
解决方法:
问题是在您的适配器方法instantiateItem中
你调用container.addVIEw(v);
但是每个VIEw只能有一个父级,
所以它只能通过addVIEw(…)添加到容器一次.
当你第一次打开d出窗口时,一切正常,因为v
那个时间没有父母.但是当你第二次打开你的popupwiNow时,
它再次将视图添加到容器中.这可以解决错误.
如果关闭d出视图或从中删除所有子视图,请尝试销毁视图container.removeAllViews()
它应该工作.
总结以上是内存溢出为你收集整理的在Android中使用ViewPager时出现java.lang.IllegalStateException全部内容,希望文章能够帮你解决在Android中使用ViewPager时出现java.lang.IllegalStateException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)