Android 使用自定义adatper和AlertDialog的IllegalStateException

Android 使用自定义adatper和AlertDialog的IllegalStateException,android,android-alertdialog,illegalstateexception,Android,Android Alertdialog,Illegalstateexception,我的活动中有多个使用同一CustomAdapter的ListView。 在我的CustomAdapter中,在每个ListView上,我都在条件中向ListView的单个项添加一个图像 我只想在单击Listener(在我的CustomAdapter中)时管理图像,并显示一个自定义AlertDialog 但我只想在这个AlertDialog上绘制ArrayList的内容 我找到了第一个解决方案:以编程方式创建一个LinearLayout并用字典的ArrayList填充它 编辑:这是MyAdapte

我的活动中有多个使用同一CustomAdapter的ListView。 在我的CustomAdapter中,在每个ListView上,我都在条件中向ListView的单个项添加一个图像

我只想在单击Listener(在我的CustomAdapter中)时管理图像,并显示一个自定义AlertDialog

但我只想在这个AlertDialog上绘制ArrayList的内容

我找到了第一个解决方案:以编程方式创建一个LinearLayout并用字典的ArrayList填充它

编辑:这是MyAdapter(为了让您理解,我将我的适配器变得更简单):

我读过这本书,这很正常,因为我还是个孩子,所以我无法取代他

我想用
alert.setAdapter
代替
alert.setView
但是我不知道

编辑:问题不是来自我的
持有者.ll

它工作正常,但当我再次单击它时,我出现了一个错误:

IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
这似乎是问题所在:

holder.ll.addView(holder.img);
快速修复方法是检查
img
是否已经有一个父项,以及它是否删除了它:

if(holder.img.getParent() != null)
    ((ViewGroup) holder.img.getParent()).removeView(holder.img);
holder.ll.addView(holder.img);

哦,在我的img的OnClickListener中使用remove视图是有效的

我刚才补充说:

holder.img.setOnClickListener(new OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    if(e.getParent() != null)
                                        ((ViewGroup) e.getParent()).removeView(e);
                                    alert.show();
                                }
                            });

:)谢谢,希望它将使用自定义版面而不是editText。

这是什么?holder.ll.addView(holder.img);。。ll是空的。我只是在我的布局上以编程方式设置了一个可点击的图像。我在上面的投票中给出了你的评论。我不确定这段代码是如何工作的,这可能只是问题中的一个错误。我将注意力集中在作者声称的“它(第一次)运行良好”上,并搜索出现异常的最可能原因。我的图像没有什么不好的地方,但是,正如您现在看到的,当我在alertDialog上放置EditText时,以及当我在图像上第二次单击时,我出现了相同的错误。。
if(holder.img.getParent() != null)
    ((ViewGroup) holder.img.getParent()).removeView(holder.img);
holder.ll.addView(holder.img);
holder.img.setOnClickListener(new OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    if(e.getParent() != null)
                                        ((ViewGroup) e.getParent()).removeView(e);
                                    alert.show();
                                }
                            });