首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android AlertDialog 自訂佈局讀取 EditText:需先膨脹視圖再查找子元素

     編輯:程式設計綜合問答

使用 AlertDialog.Builder.setView() 時,若直接對 Activity 呼叫 findViewById 會找不到對話框內的元素。必須先膨脹佈局得到 View,再對該 View 查找。

正確流程

LayoutInflater inflater = getLayoutInflater();
View dialogView = inflater.inflate(R.layout.dialog_signin, null);

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialogView)
    .setPositiveButton(R.string.login, (dialog, which) -> {
        EditText user = dialogView.findViewById(R.id.loginUsername);
        EditText pass = dialogView.findViewById(R.id.loginPassword);
        String username = user.getText().toString();
        String password = pass.getText().toString();
        // 登入邏輯
    })
    .setNegativeButton(R.string.cancel, null)
    .show();

錯誤示範

builder.setView(inflater.inflate(R.layout.dialog_signin, null))
// 後續在 onClick 中用 findViewById(R.id.loginUsername) -> 找不到,拋 NPE

原因

  • setView(View) 將佈局加入對話框視圖層級,不屬於 Activity 視圖樹。
  • 對話框顯示後,其視圖樹獨立,需持有膨脹後的 dialogView 參考。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved