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.
请问该怎么解决? 展开
程序实现代码如下:
// 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.
请问该怎么解决? 展开
2个回答
展开全部
在点击事件里面创建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();
}
});
还有,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();
}
});
追问
我试了一下,确实问题解决了,能解释一下为什么么?还有没有其他的方法。
展开全部
ViewGroup vg = (ViewGroup) view.getParent();
if (null != vg) {
vg.removeAllViewsInLayout();
}
判断下父布局是否存在
if (null != vg) {
vg.removeAllViewsInLayout();
}
判断下父布局是否存在
追问
我在view的声明下边添加了这一段。Log出来是不存在。
ViewGroup viewGroup = (ViewGroup) view.getParent();
if(viewGroup != null){
Log.i("MainActivity", "存在");
}else
Log.i("MainActivity", "不存在");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询