在Android應(yīng)用中AlertDialog的點(diǎn)擊按鈕無法關(guān)閉對話框如何解決

在Android應(yīng)用中AlertDialog的點(diǎn)擊按鈕無法關(guān)閉對話框如何解決?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)建站長期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為吳忠企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,吳忠網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

這里的問題:當(dāng)我點(diǎn)擊確定按鈕,也就是 AlertDialog 里的 PositiveButton 的時(shí)候,我們需要判斷用戶是輸入是否符合我們的預(yù)期,如果不符合通常提示用戶重寫輸入,且不關(guān)閉當(dāng)前的對話框,但上圖中點(diǎn)擊按鈕后會(huì)自動(dòng)的關(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()

但對話框還是會(huì)自動(dòng)的關(guān)閉,就算我們在 onClick 里判斷輸入的內(nèi)容,錯(cuò)誤的提示也會(huì)在窗口關(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() 會(huì)返回空

這樣在我們手動(dòng)調(diào)用 dialog.dismiss() 之前,對話框是不會(huì)關(guān)閉的。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

當(dāng)前文章:在Android應(yīng)用中AlertDialog的點(diǎn)擊按鈕無法關(guān)閉對話框如何解決
網(wǎng)頁鏈接:http://muchs.cn/article14/pihige.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、小程序開發(fā)、品牌網(wǎng)站建設(shè)網(wǎng)站排名、面包屑導(dǎo)航、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)