在Android中使用ViewPager时出现java.lang.IllegalStateException

在Android中使用ViewPager时出现java.lang.IllegalStateException,第1张

概述我有一个ViewPager,它是d出窗口的一部分.当我第一次打开d出窗口时,一切正常,但是当我第二次用相同的数据打开它时,我有一个IllegalStateException错误.这是一个堆栈跟踪:04-0815:17:48.370:E/AndroidRuntime(10929):FATALEXCEPTION:main04-0815:17:48.370:E/Androi

我有一个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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1107250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存