Вид не привязан к диспетчеру окон - PullRequest
0 голосов
/ 10 апреля 2011
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    LayoutInflater inflater = getLayoutInflater();
    LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.main, (ViewGroup) findViewById(R.id.root));

    Toast toast = new Toast(getApplicationContext());
    toast.setView(layout);
    toast.setDuration(2000);
    toast.show();
}

Этот код генерирует исключение java.lang.IllegalArgumentException: представление не привязано к оконному менеджеру. Если я изменю строку

LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.main, (ViewGroup) findViewById(R.id.root));

до

LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.main, null);

работает просто отлично.

Может кто-нибудь объяснить мне, почему это происходит? Я новичок в платформе Android, и я просто пытаюсь понять, как работает представление и менеджер окон. Не понимаю, почему, если корневое представление было присоединено к Activity, больше нельзя использовать для представления тостов.

Любая помощь приветствуется!

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

Когда вы вызываете inflater.inflate, корневой параметр является необязательным, и предполагается, что он является родителем макета, который вы пытаетесь раздуть (например, когда вы пытаетесь раздуть представление для одногострока в виде списка, вы даете представление списка в качестве родителя).

Я предполагаю, что в вашем коде R.layout.main нет родителя?В этом случае родитель должен быть нулевым.

0 голосов
/ 14 июля 2016

Не прикрепляйте раздутый макет к корню. Вызовите инфляцию с 3 параметрами, последний из которых ложный:

LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.main, (ViewGroup) findViewById(R.id.root), false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...