Android中AlertDialog 點(diǎn)擊按鈕后不關(guān)閉對(duì)話框的功能

這里的問(wèn)題:當(dāng)我點(diǎn)擊確定按鈕,也就是 AlertDialog 里的 PositiveButton 的時(shí)候,我們需要判斷用戶是輸入是否符合我們的預(yù)期,如果不符合通常提示用戶重寫(xiě)輸入,且不關(guān)閉當(dāng)前的對(duì)話框,但上圖中點(diǎn)擊按鈕后會(huì)自動(dòng)的關(guān)閉窗口。
先看原來(lái)的這個(gè)是怎么寫(xiě)的:
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();
//傳到后臺(tái)
}
})
.create();
dialog.show();
}
雖然圖片里和代碼的并不是同一個(gè),但問(wèn)題是一樣的
在 setPositiveButton 方法中,即使我們沒(méi)有調(diào)用 dialog.dismiss()
但對(duì)話框還是會(huì)自動(dòng)的關(guān)閉,就算我們?cè)?onClick 里判斷輸入的內(nèi)容,錯(cuò)誤的提示也會(huì)在窗口關(guān)閉后才出現(xiàn)。
在 AlertDialog 提供的 API 中我也沒(méi)有找到可以設(shè)置的地方,如果有還請(qǐng)告知。而我解決這個(gè)問(wèn)題的辦法:
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)擊事件拿出來(lái)設(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("請(qǐng)輸入正確的 ID");
break;
}
dialog.dismiss();
}
}
});
setPositiveButton("submit",null) 監(jiān)聽(tīng)事件傳入 null
在調(diào)用 dialog.show() 后再設(shè)置 Button 的點(diǎn)擊事件,否則 getButton() 會(huì)返回空
這樣在我們手動(dòng)調(diào)用 dialog.dismiss() 之前,對(duì)話框是不會(huì)關(guān)閉的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)點(diǎn)擊AlertDialog上按鈕時(shí)不關(guān)閉對(duì)話框的方法
- Android中AlertDialog各種對(duì)話框的用法實(shí)例詳解
- Android使用AlertDialog實(shí)現(xiàn)的信息列表單選、多選對(duì)話框功能
- Android修改源碼解決Alertdialog觸摸對(duì)話框邊緣消失的問(wèn)題
- Android 自定義AlertDialog對(duì)話框樣式
- Android對(duì)話框AlertDialog.Builder使用方法詳解
- ANDROID中自定義對(duì)話框AlertDialog使用示例
- android自定義AlertDialog對(duì)話框
- Android Alertdialog(實(shí)現(xiàn)警告對(duì)話框)
- Android開(kāi)發(fā)之AlertDialog實(shí)現(xiàn)彈出對(duì)話框
相關(guān)文章
Android 使用Vitamio打造自己的萬(wàn)能播放器(7)——在線播放(下載視頻)
本文主要介紹Android Vitamio開(kāi)發(fā)播放器,這里提供在線播放和下載視頻實(shí)例代碼,有需要的小伙伴可以參考下2016-07-07
Android開(kāi)發(fā)設(shè)計(jì)nowinandroid構(gòu)建腳本學(xué)習(xí)
這篇文章主要為大家介紹了Android開(kāi)發(fā)設(shè)計(jì)nowinandroid構(gòu)建腳本學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Android實(shí)現(xiàn)底部導(dǎo)航欄功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)底部導(dǎo)航欄功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Android ROM升級(jí)包的選項(xiàng)解釋
本文主要解釋 Android刷機(jī)過(guò)程中會(huì)遇到apply sdcard:update.zip(刷ROM升級(jí)包)的選項(xiàng),對(duì)選項(xiàng)解釋?zhuān)悦庠斐蓻](méi)必要的麻煩,希望對(duì)大家有用!2016-07-07
Android開(kāi)發(fā)中優(yōu)秀的app 異常處理機(jī)制
這篇文章主要介紹了Android開(kāi)發(fā)中優(yōu)秀的app 異常處理機(jī)制 的相關(guān)資料,需要的朋友可以參考下2015-12-12
Android實(shí)現(xiàn)帶指示器的自動(dòng)輪播式ViewPager
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶指示器的自動(dòng)輪播式ViewPager的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Android中使用Notification實(shí)現(xiàn)狀態(tài)欄的通知
本文主要介紹了android利用Notification實(shí)現(xiàn)狀態(tài)欄的通知的示例代碼。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04

