MaryDQ 2019-04-12 11:24 采纳率: 0%
浏览 2360

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

如图:

图片说明

现在想做到添加子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条回答

  • 萧萧风 2019-04-12 12:17
    关注

    调用addview不是导致父布局回到最开始的状态的原因,但一定是调用addview同时其他原因初始化了父布局或者父布局初始化了。

    评论

报告相同问题?

悬赏问题

  • ¥15 我这模型写的不对吗?为什么lingo解出来的下面影子价格这一溜少一个变量
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波