android findViewById获取null而不是concret实例

时间:2013-02-13 21:10:50

标签: android callback null widget

我遇到了问题。由于我是开发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.
    }
    })      

为什么我得到这个以及在一些回调方法中处理窗口小部件数据的正确方法(最佳实践)是什么? (如何修复)

非常感谢你在我的问题上的时间!

2 个答案:

答案 0 :(得分:4)

dialogView.findViewById将解决此问题

答案 1 :(得分:0)

问题是findViewById搜索当前的视图层次结构。如果您从Activity拨打此电话,则会搜索当前活动的视图层次结构,而您实际上想要搜索对话框:

EditText et = (EditText) dialogView.findViewById(R.id.editText1);

您可能还需要制作dialogView final

相关问题