使用false attachtoroot和true attachtoroot膨胀布局有什么区别(布尔值)

时间:2015-08-27 20:36:18

标签: android android-layout view

使用false attachtoroot和true attachtoroot(boolean)来扩充布局有什么区别?

这是一段代码:

ViewGroup rootView = (ViewGroup) inflater.inflate(
                R.layout.fragment_screen_3, container, false);

ViewGroup rootView = (ViewGroup) inflater.inflate(
                R.layout.fragment_screen_3, container, true);

3 个答案:

答案 0 :(得分:5)

rootattachToRoot参数协同工作。

如果您告诉inflate()将膨胀的视图附加到根视图,那么您膨胀的布局将作为子项添加到根目录。

以下是inflate()方法的简化:

public View inflate (int resource, ViewGroup root, boolean attachToRoot) {
    View inflatedView = inflate(resource); // Inflate the desired view

    if (attachToRoot) {
        root.addView(inflatedView);
    }
}

如果要膨胀最终将附加到父视图的视图,这很有用,例如,如果要使用相同的布局对多个视图进行充气以动态填充ListView。

答案 1 :(得分:2)

attachToRoot =假时:
- 返回的rootView将是来自ViewGroup的{​​{1}},[{1}}仍然无法添加到R.layout.fragment_screen_3。(可以添加到另一个中)查看组父母)
- 如果rootView中的顶部标记为container,则会引发异常。

R.layout.fragment_screen_3 =真时:
- 返回<merge>将是attachToRoot - rootView的内容将作为container的一部分添加(例如,当您使用R.layout.fragment_screen_3 = false时,请致电container
- 可以与attachToRoot

中的container.addView(rootView);标记一起使用

答案 2 :(得分:0)

何时使用哪个?

  • 要将attachToRoot = true添加到childView时,请使用 父现在
  • 要将attachToRoot = false添加到父级时,请使用attachToRoot = false稍后点。
  

您还应该使用public View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle bundle) { super.onCreateView(inflater,parent,bundle); View view = inflater.inflate(R.layout.image_fragment,parent,false); ..... return view; }   负责添加childView。

例如。在添加片段时

getSupportFragmentManager()
  .beginTransaction()
  .add(parent, childFragment)
  .commit();

如果将第三个参数传递为true,则由于此人,您将获得IllegalStateException。

add(parent, childFragment)

由于您已经错误地将子片段添加到了onCreateView()中。调用03 10,15,22 * * * python3 /root/Desktop/security/test.py将引发IllegalStateException,因为已经添加了子视图。
在这里您不负责添加childView,FragmentManager负责。因此,在这种情况下,请始终传递false。