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

Android 自定義對話框 findViewById 返回 Null 導致閃退解決

     編輯:程式設計疑難解答

問題現象

自定義佈局作為 Dialog,點擊按鈕獲取 EditText 內容時閃退,findViewById 返回 null。

根因

直接調用 findViewById 查找的是 Activity/Dialog 的視圖樹,而非自定義佈局視圖樹。

正確做法

// 1. 加載佈局得到根視圖
View v = LayoutInflater.from(context).inflate(R.layout.aaa, null);

// 2. Dialog 設置內容視圖
dialog.setContentView(v);
// 或 PopupWindow 構造時傳入 v

// 3. 在根視圖 v 上查找控件
EditText et = v.findViewById(R.id.my_edittext);
String text = et.getText().toString();

核心原則

  • findViewById 作用域限定在調用者的視圖層級
  • 自定義佈局必須先 inflate 得到 View 實例
  • 後續操作均在該 View 實例上進行

推薦庫

作者開源項目 BasePopup 封裝了各類 Popup 交互,可直接引用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved