今天写代码的时候出现了这个错误,功能很简单:在一个Activity中有一个ListBox,长按其中一条数据会出现编辑框,点击确定之后就跳转到令一个Activity
第一次进行跳转没什么问题,按返回键在按编辑就挂掉了,出现了下面的错误
The specified child already has a parent. You must call removeView() on the child's parent first.
也在网上搜索了很多,复杂的办法也试了几个,好像没什么反应,结合自己的代码(功能简单,哈哈),在每个功能方法打印日志,最后定位是长按事件代码的问题
@Override
public boolean onContextItemSelected(MenuItem item) {
// 在此处新建,解决removeView问题
editText = new EditText(this);
editText.setText(target[position]);
if(item.getItemId()== 1){
builder.setTitle("编辑")
.setMessage("输入")
.setView(editText)
.setPositiveButton("确定", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
target[position] = editText.getText().toString();
// 增加分辨率信息
String pix = getPixInfo();
Intent intent = new Intent();
intent.putExtra(MulticastConstantDefine.Param.PARAM_PIX, pix);
intent.putExtra(MulticastConstantDefine.Param.PARAM_T, target[position]);
intent.setClass(MainActivity.this,TestAct.class);
MainActivity.this.startActivity(intent);
}
})
.setNegativeButton("取消", null)
.show();
}
return super.onContextItemSelected(item);
}以前“editText = new EditText(this);”是在onCreate方法中new的,跳转到下一个Activity以后,当前Activity被压入栈中,按返回键回到当前View,因为事先对builder进行了setView操作,所以editText就被“绑定”在第一次长按的builder中了,再次长按,由于还是使用的这个editText,于是出异常了
本文讨论了一个在Android应用中遇到的问题:在Activity中使用ListBox时,长按事件导致的Activity崩溃。通过分析日志和代码,发现问题是由于在长按事件处理中重新创建了EditText组件,而该组件在前一次长按时已被绑定到对话框中。解决方案是在创建EditText之前调用`removeView()`方法来移除已存在的组件,避免重复绑定。
2732





