2011-03-24 85 views
0

我開發了一個擴展了Dialog的類A.從另一個類訪問組件時獲取空指針

我已經使用以下代碼充氣A類:

View layout = inflater.inflate(R.layout.custom_alert, null, false); 

custom_alert佈局文件,我加一個EditText與android:id="@+id/edit"

的情況是這樣的:

用戶點擊一個特定的listitem並打開一個對話框,用戶輸入的值(編輯文本)。

我有一個活動屏幕,考慮延伸活動的B類。

從B類,當用戶在對話框中輸入值,並點擊按鈕OK,我調用類A.

,我需要檢索的值,並存儲在數據庫中。

提供了下面的代碼片段

LayoutInflater inflater = getLayoutInflater(); 

inflater.inflate(R.layout.custom_dialog, null); 


EditText txt = (EditText) findViewById(R.id.edit); 

String value = txt.getText().toString(); 

但是,即使在充氣後custom_dialog,我無法獲取文本和我得到空指針異常。

我粘貼更新代碼......仍然沒有得到的EditText值,只有空

對話框建設者=新的對話框(這)

查看視圖= LayoutInflater.from(SampleScreen.this)。膨脹(R.layout.custom_alert,null); builder.setContentView(view);

EditText nameEditTxt =(EditText)view.findViewById(R.id.edit);

String value = nameEditTxt.getText()。toString();

回答

3

LayoutInflater#inflate返回膨脹的視圖,您應該打電話給findViewById

View view = LayoutInflater.from(this).inflate(R.layout.custom_dialog, null); 
EditText text = (EditText) view.findViewById(R.id.edit); 

確保將此鏈接以某種方式視圖層次:

dialog.setContentView(view); 

或相似。

+0

感謝您的回覆,空指針異常消失了,但返回的數據爲空,但不正確。在EditText上輸入的數據不會被抓取。的EditText lapNameEditTxt =(EditText上)視圖 \t \t \t \t \t \t \t \t \t \t .findViewById(R.id。編輯); \t \t \t \t \t \t \t \t字符串值= lapNameEditTxt.getText()\t的ToString(); – chiranjib 2011-03-24 15:30:29

+0

您必須第二次調用dialog.findViewById(R.id.edit)。你不能誇大一個全新的觀點,並期望檢索有關屏幕上的內容的信息。 – 2011-03-24 16:32:16

+0

你可以詳細解釋.. dialog.findViewById(R.id.edit)從第二次調用..如果你粘貼僞/示例代碼會很好嗎? – chiranjib 2011-03-24 19:48:08

0

你的代碼片段並沒有提供它被調用的上下文,但是你還需要確保它從Android對象存在的上下文中調用 - 不是在你的構造函數中,而是在一個生命週期方法中對話框(例如onCreate)。

+0

我*認爲*這會做的罰款onCreateDialog使用活動的上下文。至少,這就是我一直在做的事情。 – 2011-03-24 14:57:27