2016-12-07 53 views
0

我正在編寫一個Android文件查看器提供給主機應用程序,我們的查看器是一個片段,主機應用程序使用newinstance使用我們的片段。有些代碼如下:我怎樣才能防止UI線程繼續,直到密碼輸入正確

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返回片段。

這已經困擾了我很長時間,幫助表示感謝!

回答

0

那麼有什麼辦法來設置showPasswordInputDialog之間的障礙;和mpassword =。

不,對不起。

+0

那麼我的問題沒有解決辦法? –

+0

@shaopingwang:對。與大多數現代UI框架一樣,Android的基於窗口小部件的UI框架在事件驅動的基礎上工作。 – CommonsWare

+0

我認爲當輸入是正確的,然後做後來的工作是一個正常的,那麼它如何在其他Android應用程序中實現? –

0

把任何需要做的工作放在if(password is right)塊中或使用某種標誌來知道密碼是否爲真,並在openfile()中使用它。

+0

是的困難的事情是如何檢測openfile()中的標記,我使用while但它會使線程崩潰。 –

1

你不得不認爲這是一個基於事件的執行。所以不要放置

mpassword =。;

下方顯示對話方法。現在在文本更改偵聽器中,每一次更改都只是檢查它是否是正確的密碼。然後如果密碼正確,則關閉對話框並設置密碼

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

沒有必要阻止主線程。

讓我知道我是否誤解了這個問題。

+0

我認爲你是對的,當密碼正確時,把mpassword放在監聽器函數中,但是我的問題是如果我調用回調函數來通知主機應用程序密碼是正確的,那麼它如何檢測它並重新打開片段。 –

+0

你是什麼意思,重新打開片段,哪個片段,你打開密碼對話框的相同片段?或在同一活動中的其他片段,你能否清楚地向我解釋架構? –

相關問題