如何在密码输入正确之前阻止UI线程继续运行

时间:2016-12-07 15:09:42

标签: android dialog listener ui-thread

我正在为主机应用程序编写一个Android文件查看器,我们的查看器是一个片段,主机应用程序使用newinstance来使用我们的片段。一些代码如下:

newInstance () {
......
openfile();
return fragment;
}

openfile() {
......
if(ispasswordfile) {
    showPasswordInputDialog;
    mpassword = .;
    mpagecount = ..;
    ......;
    return errorcode;
} else {
    .......
}
}

 showPasswordDialog() {
     ......
     dialog.show();
     EditText edittext = dialog.findViewById(...);
     edittext.addListener(){
         override
         public boolean action....{
             .......
             if(password is right) {
                 .....
             }
         }
     };

我的问题是当对话框输入密码正确,然后执行showPasswordInputDialog之后的句子。这些代码都在UI线程中运行,如果密码错误,监听器需要更改UI,因此我无法暂停UI线程。那么有没有办法在showPasswordInputDialog之间设置一个障碍;和mpassword =。;当密码正确时,我将删除屏障并让UI线程关闭。 我尝试使用while循环它不起作用。当密码正确时,我无法在监听器中添加操作,因为我想通过newInstance返回片段。

这让我困扰了很长时间,感谢你的帮助!

3 个答案:

答案 0 :(得分:1)

你必须认为这是一个基于事件的执行。所以不要放置

  

mpassword =。;

显示对话框方法下面的

。现在在文本更改侦听器中,在每次更改时只检查它是否是正确的密码。然后,如果密码正确,则关闭对话框并设置密码

if(password is right) {
   mpassword = .; //Then continue your work from here or call other method.
}

无需阻止主线程。

如果我误解了这个问题,请告诉我。

答案 1 :(得分:0)

  

那么有没有办法在showPasswordInputDialog之间设置障碍;和mpassword =。;

不,抱歉。

答案 2 :(得分:0)

if(password is right)块中放置需要完成的任何工作或使用某种标记来确定密码是否为真并在openfile()中使用它。