视图未附加到Window Manager

时间:2011-04-10 15:44:22

标签: android android-layout

    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平台的新手,我只是想了解视图和Windows管理器的工作原理。 不明白为什么如果根视图附加到Activity不能再用于toast视图了。

任何帮助表示赞赏!

谢谢!

2 个答案:

答案 0 :(得分:2)

当您调用inflater.inflate时,root参数是可选的,并且应该是您尝试膨胀的布局的父级(例如,当您尝试为单个视图充气时在列表视图中的行,您将列表视图作为父级)。

我的猜测是,在您的代码中,R.layout.main没有任何父级?在这种情况下,父级应该为空。

答案 1 :(得分:0)

不要将膨胀的布局附加到root。用3个参数调用膨胀,最后一个错误:

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