我遇到了问题。由于我是开发Android应用程序的新手,我想我没有把所有的概念都搞定。
问题是:
在我的对话框中,输入所有信息并按下“确定”按钮后,我想得到我刚进入TextEdit
字段的内容。但是当我尝试时
通过EditText
通过okButton.onClickListener
得到findViewById(R.id.myTextEditId)
Null
而不是实例。
以下是一些代码:
Dialog的XML(我定义EditText的部分):
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="4dp"
android:inputType="textMultiLine"
android:maxLines="3"
android:hint="@string/add_new_note_hint">
<requestFocus />
</EditText>
以下是NPE的代码:
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
View dialogView = getLayoutInflater().inflate(R.layout.add_note_dialog,null);
dialogBuilder.setTitle(R.string.add_dialog_title)
.setPositiveButton(R.string.add_dialog_pos_but, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EditText et = (EditText) findViewById(R.id.editText1); //this is where I get null instead of real instance.
}
})
为什么我得到这个以及在一些回调方法中处理窗口小部件数据的正确方法(最佳实践)是什么? (如何修复)
非常感谢你在我的问题上的时间!
答案 0 :(得分:4)
dialogView.findViewById将解决此问题
答案 1 :(得分:0)
问题是findViewById
搜索当前的视图层次结构。如果您从Activity
拨打此电话,则会搜索当前活动的视图层次结构,而您实际上想要搜索对话框:
EditText et = (EditText) dialogView.findViewById(R.id.editText1);
您可能还需要制作dialogView
final
。