java - Click 和 LongClick 监听器抛出 IllegalStateException

标签 java android exception button onclicklistener

尝试为 RelativeLayout 实现 onClickListeneronLongClickListener 时出现此错误:

10-19 17:49:31.400: E/AndroidRuntime(30886): FATAL EXCEPTION: main
10-19 17:49:31.400: E/AndroidRuntime(30886): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

这是代码的一部分:

RelativeLayout meals_layout = (RelativeLayout) view
.findViewById(R.id.meals);      

meals_layout.setOnLongClickListener(new OnLongClickListener() { 
    @Override
    public boolean onLongClick(View v) {

        AlertDialog.Builder builder = new AlertDialog.Builder(
                JournalActivity.this);
        builder.setTitle(R.string.meal_delete); 
        builder.setView(clickView);

        builder.setPositiveButton(R.string.string_delete,
                new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

            }

        });
        builder.setNegativeButton(R.string.string_cancel,
                new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog,
                    int which) {
                // Do nothing
                dialog.dismiss();
            }
        });

        builder.create().show();
        return false;
    }
});

meals_layout.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(
                JournalActivity.this);
        builder.setTitle(R.string.meal_edit); // al que hacerlo bonito
        builder.setView(clickView);

        builder.setPositiveButton(R.string.string_edit,
                new DialogInterface.OnClickListener() {
        }
    });

        builder.setNegativeButton(R.string.string_cancel,
                new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog,
                    int which) {
                // Do nothing
                dialog.dismiss();
            }
        });


        builder.create().show();

}
});

第一次打开 Activity 时,我可以根据需要多次长按。但是,当我单击任何其他按钮(不仅是此处判决的按钮)时,如果我再次尝试长按...应用程序就会崩溃。

我将非常感谢您的帮助。 谢谢:)

最佳答案

每个 View 仅允许一个父 View 。显然 clickView 已经有一个,所以当你调用 setView(clickView) 时它会抛出错误。一种修复方法是添加:

((GroupView) clickView.getParent()).removeView(clickView);

到两位听众的开头。这将“孤立”clickView,以便将其添加到 AlertDialog。

关于java - Click 和 LongClick 监听器抛出 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12982512/

相关文章:

java - 使用 Java 和 PHP 的 AES CBC 128 位加密

java - 电子邮件验证正则表达式 JAVA

java - 什么是NullPointerException,我该如何解决?

java - SQLite VACUUM 命令

java - Android 中的全景图

java - Jersey 全局异常处理程序不起作用

C++11 复制省略号和异常(catch 参数)

java - 如何在 Windows 上设置 JUNIT 以使用 Sublime 和命令行?

java - 使用反射 api 时抛出 NoSuchMethodException

android - 为对话框创建阴影