我试图在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();
}
}
}
};
答案 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()