最近在做一个项目时需要用到listView中item点击显示弹出框,第一次弹出正常运行,第二次点击就会崩溃报错illegalStateException: The specified child already has a parent 问题在没有调用parent的removeView方法清楚之前的View,然而adapterView并不支持removeView方法
经过查找应当在弹出事件中使用
removeViewInLayout方法
上代码
listView.setOnItemClickListener
(new AdapterView.OnItemClickListener
() { @Override public void onItemClick(AdapterView<?> parent
, View view
, final int i
, long id
) { parent
.removeViewInLayout
(dialogView); dialogView = getLayoutInflater
().inflate
(R.layout.layout_2,null); dialogWord = (EditText) dialogView.findViewById
(R.id.et_dialog_word); dialogDetail = (EditText) dialogView.findViewById
(R.id.et_dialog_detail); dialogWord.setText
(dataList.get
(i
).get
("word")); dialogDetail.setText
(dataList.get
(i
).get
("detail")); AlertDialog.Builder builder
= new AlertDialog.Builder
(Result_Activity.this); builder
.setIcon
(R.mipmap.ic_launcher); builder
.setTitle
("单词信息");
builder
.setView
(dialogView);
builder
.setNegativeButton
("确认修改", new DialogInterface.OnClickListener
() { @Override public void onClick(DialogInterface arg0
, int arg1
) { SQLiteDatabase db
= dbHelper.getReadableDatabase
(); String sql
= "update dict set word = ?, detail = ? where _id = ?"; db
.execSQL
(sql
,new String
[]{dialogWord.getText
().toString
(),dialogDetail.getText
().toString
(),dataList.get
(i).get
("id")}); Toast.makeText
(Result_Activity.this,"数据修改成功",Toast.LENGTH_SHORT).show
(); dataList.get
(i).put
("word",dialogWord.getText
().toString
()); dataList.get
(i).put
("detail",dialogDetail.getText
().toString
()); adapter.notifyDataSetChanged
(); } }); builder
.setPositiveButton
("取消",null); builder
.create
(); builder
.show
(); } });