在关闭对话框后再次打开对话框时,应用程序崩溃并给出“ java.lang.IllegalStateException”

哈马德·纳西尔|

我有一个对话框,应该在对话框中填写一些详细信息EditText如果在编辑文本为空时单击肯定按钮,Snackbar则会显示带有消息的,并且对话框将关闭。但是,当我再次打开对话框时,该应用程序会发疯并给出:java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first错误。

这是我扩大视图的方式:

LayoutInflater inflater = this.getLayoutInflater();
addVenueDialog = inflater.inflate(R.layout.add_venue_dialog, null);

这是打开对话框并检查编辑文本是否为空的背后的Java代码:

case R.id.nav_add_venue:
            if (dialog == null) {

                LayoutInflater inflater = this.getLayoutInflater();
                View addVenueDialog = inflater.inflate(R.layout.add_venue_dialog, null);

                vName = (EditText) addVenueDialog.findViewById(R.id.vName);
                vAddress = (EditText) addVenueDialog.findViewById(R.id.vAddress);

                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("Title");
                builder.setView(addVenueDialog);
                builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        if (isNetworkAvailable()) {
                            if (vName.getText().toString().isEmpty()) {
                                Snackbar snackbar = Snackbar
                                        .make(coordinatorLayout, "V name cannot be empty", Snackbar.LENGTH_SHORT);
                                snackbar.show();
                            } else if (vAddress.getText().toString().isEmpty()) {
                                Snackbar snackbar = Snackbar
                                        .make(coordinatorLayout, "V address cannot be empty", Snackbar.LENGTH_SHORT);
                                snackbar.show();
                            } else {
                                mDatabase.child("vs").child(user.getUid()).child("V name").setValue(vName.getText().toString());
                                mDatabase.child("vs").child(user.getUid()).child("V address").setValue(vAddress.getText().toString());
                            }
                        } else {
                            Snackbar snackbar = Snackbar
                                    .make(coordinatorLayout, "No internet connection", Snackbar.LENGTH_SHORT);
                            snackbar.show();
                        }
                    }
                });
                dialog = builder.create();
            }
            dialog.show();
            break;

我不知道为什么在关闭对话框后再次打开对话框时该应用程序崩溃。

请告诉我。

罗希特·阿里亚(Rohit Arya)

一个简单的解决方案是保留AlertDialog并重新使用它的全局实例

//global
private AlertDialog dialog;

现在在切换情况下:

case R.id.nav_add_venue:
    if(dialog == null) {
        LayoutInflater inflater = this.getLayoutInflater(); 
        View addVenueDialog = inflater.inflate(R.layout.add_venue_dialog, null); 

        builder.setView(addVenueDialog); 

        final EditText vName = (EditText) addVenueDialog.findViewById(R.id.vName); 
        final EditText vAddress = (EditText) addVenueDialog.findViewById(R.id.vAddress); 

        // Other code //
        dialog = builder.create();
     }
     dialog.show();
     break;

记住dismiss使用对话onDestroy方法以避免内存泄漏:

public void onDestroy() {
   super.onDestroy();
   if(dialog != null) {
     dialog.dismiss();
   }
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

显示对话框时出现java.lang.IllegalStateException错误

来自分类Dev

“自定义”对话框中的java.lang.IllegalStateException

来自分类Dev

自定义对话框中的java.lang.IllegalStateException

来自分类Dev

java.lang.IllegalStateException:打开

来自分类Dev

改造:java.lang.IllegalStateException:已关闭

来自分类Dev

java.lang.IllegalStateException:关闭后无法获取 ClosableLazy 值

来自分类Dev

Java-java.lang.IllegalStateException:源已被使用或关闭

来自分类Dev

java.lang.IllegalStateException:ViewPager

来自分类Dev

java.lang.IllegalStateException牛刀

来自分类Dev

EJB java.lang.IllegalStateException

来自分类Dev

码头-java.lang.IllegalStateException:zip文件已关闭

来自分类Dev

乌鸦连接java.lang.IllegalStateException:正在关闭

来自分类Dev

java.lang.IllegalStateException:扫描仪关闭ERROR

来自分类Dev

java.lang.IllegalStateException:解析实现后找不到方法

来自分类Dev

java.lang.IllegalStateException:Facebook 提供程序未配置

来自分类Dev

尝试使用MongoDB BulkWriteOperation时出现java.lang.IllegalStateException

来自分类Dev

重新加载Tomcat时出现java.lang.IllegalStateException

来自分类Dev

尝试检索专辑封面时出现java.lang.IllegalStateException

来自分类Dev

Java IntToBinary应用程序:线程“主”中的异常java.lang.IllegalStateException:扫描程序已关闭

来自分类Dev

java.lang.IllegalStateException:不在FX应用程序线程上;currentThread =线程4

来自分类Dev

无法编译应用程序java.lang.IllegalStateException:processingEnv不能为null

来自分类常见问题

java.lang.IllegalStateException:FragmentManager已被破坏

来自分类Dev

onRequestPermissionsResult()中的Android java.lang.IllegalStateException

来自分类Dev

RecyclerView,项目刷卡,java.lang.IllegalStateException

来自分类Dev

java.lang.IllegalStateException:活动已被破坏

来自分类Dev

java.lang.IllegalStateException:片段已添加

来自分类Dev

java.lang.IllegalStateException:已在setDoOutput连接

来自分类Dev

java.lang.IllegalStateException:找不到方法

来自分类Dev

java.lang.IllegalStateException:没有SessionManager

Related 相关文章

  1. 1

    显示对话框时出现java.lang.IllegalStateException错误

  2. 2

    “自定义”对话框中的java.lang.IllegalStateException

  3. 3

    自定义对话框中的java.lang.IllegalStateException

  4. 4

    java.lang.IllegalStateException:打开

  5. 5

    改造:java.lang.IllegalStateException:已关闭

  6. 6

    java.lang.IllegalStateException:关闭后无法获取 ClosableLazy 值

  7. 7

    Java-java.lang.IllegalStateException:源已被使用或关闭

  8. 8

    java.lang.IllegalStateException:ViewPager

  9. 9

    java.lang.IllegalStateException牛刀

  10. 10

    EJB java.lang.IllegalStateException

  11. 11

    码头-java.lang.IllegalStateException:zip文件已关闭

  12. 12

    乌鸦连接java.lang.IllegalStateException:正在关闭

  13. 13

    java.lang.IllegalStateException:扫描仪关闭ERROR

  14. 14

    java.lang.IllegalStateException:解析实现后找不到方法

  15. 15

    java.lang.IllegalStateException:Facebook 提供程序未配置

  16. 16

    尝试使用MongoDB BulkWriteOperation时出现java.lang.IllegalStateException

  17. 17

    重新加载Tomcat时出现java.lang.IllegalStateException

  18. 18

    尝试检索专辑封面时出现java.lang.IllegalStateException

  19. 19

    Java IntToBinary应用程序:线程“主”中的异常java.lang.IllegalStateException:扫描程序已关闭

  20. 20

    java.lang.IllegalStateException:不在FX应用程序线程上;currentThread =线程4

  21. 21

    无法编译应用程序java.lang.IllegalStateException:processingEnv不能为null

  22. 22

    java.lang.IllegalStateException:FragmentManager已被破坏

  23. 23

    onRequestPermissionsResult()中的Android java.lang.IllegalStateException

  24. 24

    RecyclerView,项目刷卡,java.lang.IllegalStateException

  25. 25

    java.lang.IllegalStateException:活动已被破坏

  26. 26

    java.lang.IllegalStateException:片段已添加

  27. 27

    java.lang.IllegalStateException:已在setDoOutput连接

  28. 28

    java.lang.IllegalStateException:找不到方法

  29. 29

    java.lang.IllegalStateException:没有SessionManager

热门标签

归档