Android 使用AlertDialog.builder弹出对话框。

做了一个ListView,想要实现点击任何一个item都可以弹出一个自定义的对话框。程序实现代码如下://alert_selection.xml是自定义的对话框布局文件V... 做了一个ListView,想要实现点击任何一个item都可以弹出一个自定义的对话框。
程序实现代码如下:
// alert_selection.xml是自定义的对话框布局文件
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.alert_selection, null);
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setView(view);
builder.setTitle("**");

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
builder.show();
}
});

运行程序后第一次点击Item能够正常打开对话框,没有任何问题,但是点击其他位置关闭对话框之后。再次点击Item,程序就会崩溃,提示错误:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

请问该怎么解决?
展开
 我来答
鸽神听音乐
2016-03-25 · 超过19用户采纳过TA的回答
知道答主
回答量:89
采纳率:100%
帮助的人:21.8万
展开全部
在点击事件里面创建Dialog就可以了。
还有,builder应该先执行create()方法

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
View view1 = LayoutInflater.from(MainActivity.this).inflate(R.layout.alert_selection, null);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setView(view1);
builder.setTitle("**");
builder.create().show();
}
});
追问
我试了一下,确实问题解决了,能解释一下为什么么?还有没有其他的方法。
wqw0000oooo
2016-03-25 · TA获得超过246个赞
知道小有建树答主
回答量:200
采纳率:100%
帮助的人:161万
展开全部
ViewGroup vg = (ViewGroup) view.getParent();
if (null != vg) {
vg.removeAllViewsInLayout();
}

判断下父布局是否存在
追问
我在view的声明下边添加了这一段。Log出来是不存在。
ViewGroup viewGroup = (ViewGroup) view.getParent();
if(viewGroup != null){
Log.i("MainActivity", "存在");
}else
Log.i("MainActivity", "不存在");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式