DialogFragment不会停止主线程执行

时间:2016-11-30 17:12:42

标签: android

我试图在DialogFragment之后阻止代码,因为代码扫描显示但它确实更加精确,问题是,当我打电话给notifi时,已完成并没有停止等待和我无法理解为什么......任何人都可以告诉我的错误。多谢我的英语。

这里有代码:

 ModifyDialog modifyDialog=(ModifyDialog)ModifyDialog.CreateNewInstace();
            Thread done=null;

            modifyDialog.SetListener(new ModifyDialog.NoticeDialogListener() {
                @Override
                public void onDialogPositiveButton(DialogInterface dialogFragment) {
                    synchronized (this) {
                        notifyAll();
                    }
                }

                @Override
                public void onDialogNegativeButton(DialogInterface dialogFragment) {
                    synchronized (this) {
                        notifyAll();
                    }
                }
            });
            modifyDialog.show(
                    getActivity().getSupportFragmentManager(),"selectmode"
            );
            final Button MODIFICA=(Button)v;
            done=new Thread(){
                public void start(){
                    synchronized (this) {
                        try {
                            super.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                        Log.i("Thread state ","notificated");

                        if (MODIFICA.getText().equals("MODIFICA")) {
                            MODIFICA.setText("Salva");
                            MOD = true;
                            setModificatedElement();

                        } else {
                            MODIFICA.setText("MODIFICA");
                            MOD = false;
                            SaveChanges();
                            setModificatedElement();
                        }
                    }
                }
            };

1 个答案:

答案 0 :(得分:0)

您在不同的对象上调用notifyAll()wait()(内部类的实例,this始终引用最内层类的实例)。解决方案:
(1)使用modifyDialog(必须是最终版):modifyDialog.wait()modifyDialog.notifyAll()
(2)使用DialogFragment(或调用您正在处理的外部类)实例:DialogFragment.this.wait()DialogFragment.this.notifyAll()
(3)声明并设置新private final Object sync = new Object()并使用sync.wait()sync.notifyAll()