MaryDQ
MaryDQ
2019-04-12 11:24

android 父布局调用addview之后,会刷新自己和子布局,导致父布局回到最开始的布局状态

  • android-studio
  • android

如图:

图片说明

现在想做到添加子view以后,父布局不会回到最开始的状态,请问各路大神有什么好方法吗?

父view是一个自定义控件,加入了边界检测,可以上下左右拖动
子view就是一个桌子,通过调用父布局的addview加入到父布局中

遇到这个问题的时候去查过源码,源码中addview(View view)最后会调用

public void addView(View child, int index, LayoutParams params) {
        if (DBG) {
            System.out.println(this + " addView");
        }

        if (child == null) {
            throw new IllegalArgumentException("Cannot add a null child view to a ViewGroup");
        }

        // addViewInner() will call child.requestLayout() when setting the new LayoutParams
        // therefore, we call requestLayout() on ourselves before, so that the child's request
        // will be blocked at our level
        requestLayout();
        invalidate(true);
        addViewInner(child, index, params, false);
    }

这个方法最后会调用requestLayout()和invalidate(true)

我判断就是因为调用了这两个方法,所以导致父布局回到最开始的状态了。

各路大神有没有不调用addview把子布局添加进去,或者能避免requestLayout()和invalidate(true)的影响

不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答