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

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同时其他原因初始化了父布局或者父布局初始化了。

    评论
    解决 无用
    打赏 举报
  • 王能 2019-04-15 08:58

    子布局变化了父布局刷新很正常啊,你想保存父布局的状态当然是在父布局里声明全局变量来保存了

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题