Android中AlertDialog 點(diǎn)擊按鈕后不關(guān)閉對話框的功能
這里的問題:當(dāng)我點(diǎn)擊確定按鈕,也就是 AlertDialog 里的 PositiveButton 的時(shí)候,我們需要判斷用戶是輸入是否符合我們的預(yù)期,如果不符合通常提示用戶重寫輸入,且不關(guān)閉當(dāng)前的對話框,但上圖中點(diǎn)擊按鈕后會自動的關(guān)閉窗口。
先看原來的這個(gè)是怎么寫的:
private void openDialog() { LinearLayout linearLayout = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.change_password_dialog, null); final EditText originPasswordEt = (EditText) linearLayout.findViewById(R.id.origin_password); TextView forgetPassword = (TextView) linearLayout.findViewById(R.id.forget_password); final AlertDialog dialog = new AlertDialog.Builder(getContext()) .setView(linearLayout) .setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String originPassword = originPasswordEt.getText().toString().trim(); //傳到后臺 } }) .create(); dialog.show(); }
雖然圖片里和代碼的并不是同一個(gè),但問題是一樣的
在 setPositiveButton
方法中,即使我們沒有調(diào)用 dialog.dismiss()
但對話框還是會自動的關(guān)閉,就算我們在 onClick 里判斷輸入的內(nèi)容,錯(cuò)誤的提示也會在窗口關(guān)閉后才出現(xiàn)。
在 AlertDialog 提供的 API 中我也沒有找到可以設(shè)置的地方,如果有還請告知。而我解決這個(gè)問題的辦法:
final AlertDialog dialog = new AlertDialog.Builder(getActivity()) .setTitle(msg) .setView(layout) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setPositiveButton("submit",null) .setCancelable(true) .create(); dialog.show(); //為了避免點(diǎn)擊 positive 按鈕后直接關(guān)閉 dialog,把點(diǎn)擊事件拿出來設(shè)置 dialog.getButton(AlertDialog.BUTTON_POSITIVE) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Pattern pattern = Pattern.compile("[0-9]*"); Matcher matcher = pattern.matcher(editText.getText()); if (!matcher.matches()){ showToast("請輸入正確的 ID"); break; } dialog.dismiss(); } } });
setPositiveButton("submit",null)
監(jiān)聽事件傳入 null
在調(diào)用 dialog.show()
后再設(shè)置 Button 的點(diǎn)擊事件,否則 getButton()
會返回空
這樣在我們手動調(diào)用 dialog.dismiss()
之前,對話框是不會關(guān)閉的。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)點(diǎn)擊AlertDialog上按鈕時(shí)不關(guān)閉對話框的方法
- Android中AlertDialog各種對話框的用法實(shí)例詳解
- Android使用AlertDialog實(shí)現(xiàn)的信息列表單選、多選對話框功能
- Android修改源碼解決Alertdialog觸摸對話框邊緣消失的問題
- Android 自定義AlertDialog對話框樣式
- Android對話框AlertDialog.Builder使用方法詳解
- ANDROID中自定義對話框AlertDialog使用示例
- android自定義AlertDialog對話框
- Android Alertdialog(實(shí)現(xiàn)警告對話框)
- Android開發(fā)之AlertDialog實(shí)現(xiàn)彈出對話框
相關(guān)文章
Android編程實(shí)現(xiàn)禁止系統(tǒng)鎖屏與解鎖亮屏的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)禁止系統(tǒng)鎖屏與解鎖亮屏的方法,實(shí)例分析了Android關(guān)閉屏幕、鎖屏及解鎖屏幕的相關(guān)技巧,需要的朋友可以參考下2015-12-12Android中判斷手機(jī)是否聯(lián)網(wǎng)實(shí)例
這篇文章主要介紹了Android中判斷手機(jī)是否聯(lián)網(wǎng)實(shí)例,包括xml配置文件及功能代碼的實(shí)現(xiàn),需要的朋友可以參考下2014-10-10Flutter配置代理抓包實(shí)現(xiàn)過程詳解
這篇文章主要為大家介紹了Flutter配置代理抓包實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02AndroidStudio不自動添加新創(chuàng)建的文件到VCS的解決辦法
這篇文章主要介紹了AndroidStudio不自動添加新創(chuàng)建的文件到VCS的解決辦法的相關(guān)資料,需要的朋友可以參考下2017-03-03Android編程實(shí)現(xiàn)對文件夾里文件排序的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)對文件夾里文件排序的方法,涉及Android文件操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-01-01Android TextView前增加紅色必填項(xiàng)星號*的示例代碼
TextView是一個(gè)完整的文本編輯器,但是基類為不允許編輯,其子類EditText允許文本編輯,這篇文章主要介紹了Android TextView前增加紅色必填項(xiàng)星號*的示例代碼,需要的朋友可以參考下2024-03-03