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视图了。
任何帮助表示赞赏!
谢谢!
答案 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);