您好,登錄后才能下訂單哦!
在Android應(yīng)用中AlertDialog的點擊按鈕無法關(guān)閉對話框如何解決?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
這里的問題:當(dāng)我點擊確定按鈕,也就是 AlertDialog 里的 PositiveButton 的時候,我們需要判斷用戶是輸入是否符合我們的預(yù)期,如果不符合通常提示用戶重寫輸入,且不關(guān)閉當(dāng)前的對話框,但上圖中點擊按鈕后會自動的關(guān)閉窗口。
先看原來的這個是怎么寫的:
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(); }
雖然圖片里和代碼的并不是同一個,但問題是一樣的
在 setPositiveButton
方法中,即使我們沒有調(diào)用 dialog.dismiss()
但對話框還是會自動的關(guān)閉,就算我們在 onClick 里判斷輸入的內(nèi)容,錯誤的提示也會在窗口關(guān)閉后才出現(xiàn)。
在 AlertDialog 提供的 API 中我也沒有找到可以設(shè)置的地方,如果有還請告知。而我解決這個問題的辦法:
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(); //為了避免點擊 positive 按鈕后直接關(guān)閉 dialog,把點擊事件拿出來設(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 的點擊事件,否則 getButton()
會返回空
這樣在我們手動調(diào)用 dialog.dismiss()
之前,對話框是不會關(guān)閉的。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。