2017-09-19 49 views
0

我有用戶可以更改的EditTexts片段。尋找在onPause中實現模態對話框的最佳方式

除了我回到工具欄(和物理後退按鈕太)

當用戶點擊後,我檢查按鈕,如果數據被改變,如果這是 - 我需要打開對話框,詢問用戶「你想保存更改嗎?」。獲得點擊並採取相應措施(正面或負面答案)。

保存數據的最佳地點(也許我錯了)在onPause這個片段。

問題出在對話框 - 它不是模態的,當它顯示問題並等待用戶反應時 - 它下面的片段消失,並且之前從堆棧中返回。 我需要用對話框「暫停onPause」,直到用戶做出選擇。什麼是簡單(或最正確)的方式來做到這一點?

@Override 
public void onPause() { 
    if (!(text.getText().toString().equals(user.getName()))) 
    { 
     new MaterialDialog.Builder(getActivity()) 
       .title("Save changes?") 
       .content("You changed you personal details, save changes?") 
       .cancelable(false) 
       .positiveText("Save") 
       .negativeText("Discard") 
       .onPositive(new MaterialDialog.SingleButtonCallback() { 
        @Override 
        public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { 
         save(); 
        }}) 
       .show(); 
    } 
    super.onPause(); 
} 

如果我想的onPause之前做到這一點 - 我需要趕上工具欄的後退按鈕和物理後退按鈕 - 似乎太辛苦了這一點。尋找優雅的方式。

謝謝活動時移動到背景

回答

0

的onPause被稱爲(未顯示在屏幕上了)。

要在應用程序關閉前顯示對話框,您可以覆蓋活動中的「onBackPressed」功能。

@Override 
public void onBackPressed() { 
    performBackPressed(); 
} 

public void performBackPressed(){ 
    //show your dialog here 
    //call finish(); when done to close app 
} 

你可以打電話,只要按下工具欄上的後退按鈕太performBackPressed()方法。

如果您嘗試在按下後退時顯示片段中的彈出式菜單,那麼您仍然必須在該活動中重寫該方法,然後在按下後退按鈕時通知片段。

在我的應用程序,我有一個容器中的活動,其中包含我所有的片段。我用這個代碼來獲得當前活動的片段:

YourFragmentClass curFrag = (YourFragmentClass) fragmentManager.findFragmentById(R.id.fragment_container); 

然後我在片段的方法稱爲onBackPressed(),我只是叫上我剛剛得到的片段。

+0

這是一個片段。它沒有onBackPressed。 – Shmuel

+0

我更新了我的答案 – swerly

相關問題