首页 > 其他 > 详细

You must call removeView() on the child's parent first

时间:2014-03-17 01:26:39      阅读:896      评论:0      收藏:0      [点我收藏+]

      由于我在做底部框架的时候,使用的是以ViewPager+代码控制来实现类似微信的主页框架的显示效果。大概就是实现了这种效果:

bubuko.com,布布扣

     

翻页效果是用ViewPager来实现的,下面的tabs的响应跟随效果是使用代码控制。

当然上面是使用了5个布局来完成翻页效果。

但是我在实现另一个效果的时候,出现了问题:

譬如:我想在第三个页面(home页面)点击,通过它的被点击触发了监听。然后进行判断token是否存在?若存在第三个页面显示效果不变!反之,则布局改变为另一个!在这种情况下,使得下面的tabs保持不变的时候<解释一下,所有的页面的展示是通过布局初始化来控制其中的所有控件的。不要简单地认为是通过Fragment or Activity来实现的,NO!>

于是在如下代码:

public class MyOnClickListener implements OnClickListener{
    private int index = 0;
    private ViewPager mViewPager;
    private Context context;
    private ArrayList<View> views;
    private View loginLayout;
    private LayoutInite layoutInite;
    private Handler mHandler;      
    public final static int TAG_GET_MYSELF_DATA=0067;
    public MyOnClickListener(Context context,int index,ViewPager mViewPager,
            ArrayList<View> views,View loginLayout,LayoutInite layoutInite,Handler mHandler) {
        this.context=context;
        this.index = index;
        this.mViewPager=mViewPager;
        this.views=views;
        this.loginLayout=loginLayout;
        this.layoutInite=layoutInite;
        this.mHandler=mHandler;
                                                                                                                                                                                           
    }
    @Override
    public void onClick(View v) {
        String token=SharedpreferensUitls.getToken(context);
        //判断token是否为空,为空的话改变个人中心布局为登录的页面
        Log.d("token", "============》"+token);
        if(TextUtils.isEmpty(token)){
            Log.d("view", "ArrayList<View> views-->"+views);
            Log.d("view", "View viewLogin-->"+loginLayout);
            views.remove(3);
            views.add(3,loginLayout);//这里不进行上一步的操作会报错--->The specified child already has a parent. 
        }                            //You must call removeView() on the child‘s parent first.
        layoutInite.getMayPagerAdp().notifyDataSetChanged();
        mViewPager.setCurrentItem(index);
    }

此时,要实现这种二次点击第三个页面模块,要仍然保持底部tabs的效果不变。那我就要向原先初始化过的布局(这几个布局在容器ArraList中,其对象是views)容器的对象中,添加所初始化过的,要通过判断是否有token来显示出来的页面效果。就像上面一样,在添加的上面要添加一句代码,很重要:

views.remove(3);

添加过之后就不会再有bug--> you must call removeView() on the child‘s parent first.

真正的理论原因我还不知道,请看到并知道的朋友能留下真知灼见!


本文出自 “Android开发” 博客,请务必保留此出处http://yuanjunhua.blog.51cto.com/8608114/1377723

You must call removeView() on the child's parent first,布布扣,bubuko.com

You must call removeView() on the child's parent first

原文:http://yuanjunhua.blog.51cto.com/8608114/1377723

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!