最近在使用由xml文件转换成的view犯了一个令我郁闷的bug,查找了相关的资料,终于找到了答案,同时也使自己对Android中的View的数据结构有了更深的认识,在此记下,以防自己再犯类似的错误。
先附上我的错误代码。
private LayoutInflater factory;
private View myView;
private Dialog dialog;
private Button but_save;
private Button but_cancel;
but_save = mActivity.findViewById(R.id.but_save);
but_cancel = mAcivity.findViewById(R.id.but_cancel);
factory = LayoutInflater.from(mActivity);
myView = factory.inflate(R.layout.dialog, null)
this.setting_button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
dialog = new AlertDialog.Builder(mActivity).setView(myView).create();
dialog.show();
}
});
this.but_cancel.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
后来我发现错误的原因是:上面由xml文件转成的View是没有上一级的父View,说的通俗一点就是没有爸爸,当我们将它填充到Dialog中时即给是说这个由xml文件转换成的View有了父View--Dialog。但是在but_cancel的监听事件中我并没有将这个Dialog空件给kill掉,仅仅是dismiss掉了,在下一次的but_save的监听事件中又一次new了一个新的Dialog控件,并且见转换而来的view填到了新的Dialog中,即给又给它找了一个爸爸,出现了错误。在Android中View采用了树形数据结构,一个View只能有一个父View。在此犯了一个低级的错误,希望大家一次为鉴。