Уточнение по поводу компоновки надувателя-прикрепить к корню?


Я прочитал ответ на Почему LayoutInflater игнорирует параметры layout_width и layout_height, которые я указал? и хотел убедиться, что я понял, что делает attach to root. В основном, если вы делаете

inflater.inflate(int idOfLayoutFile, ViewGroup parent, boolean AttachToRoot)

И допустим, что родитель не равен нулю

Из того, что я получил из этого ответа, было то, что attach to root просто влияет на то, какой тип возврата имеет метод inflate. То есть, если attachToRoot является true, метод вернет parent, а если это false, то метод будет возвращает корневое представление XML-файла, указанное в идентификаторе ресурса. Есть ли у меня правильная идея или я что-то упускаю?

3 2

3 ответа:

Нет, что-то упущено!

Когда вы передадите true как 'attach to root', inflater раздует указанный макет (представленный его идентификатором) , а затем присоединит его к корню родителя и, наконец, вернет родителя

Но когда вы оставили "прикрепить к корню" к false. родительская иерархия не будет изменена, и будет возвращен только увеличенный макет.

Да, вы правы. :: короче говоря

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = LayoutInflater.from(getActivity()).inflate(
                R.layout.your_layout, null);
        return view;
    }
  • теперь в соответствии с приведенным выше кодом view ссылка будет содержать корневой элемент для расположение your_layout
  • Вы можете использовать эту ссылку view, чтобы найти все дочерние представления этого Родительский макет
  • Вы можете сослаться на ребенка views здесь, даже если activity не является создано еще

Если вы прочитаете это , вы обнаружите, что не следует передавать null Как значение root ViewGroup, Если вы не хотите присоединять его, а вместо этого следует использовать 3-параметрическую версию inflater.inflate с 3-м параметром (attach to root), установленным в false. То есть, сделайте так:

     @Override
        public View onCreateView(LayoutInflater inflater, 
                                 ViewGroup container,
                                 Bundle savedInstanceState) 
{
            View view = LayoutInflater.from(getActivity()).inflate
                               (
                                 R.layout.your_layout, 
                                 container, 
                                 false
                                );
            return view;
        }

И из документов :

root необязательное представление, являющееся родителем созданной иерархии (если attachToRoot имеет значение true), или просто объект, который предоставляет набор LayoutParams значений для корня возвращаемого объекта. иерархия (Если attachToRoot-false.)

И это действительно хорошо.