0

我有问题。由于我是开发 Android 应用程序的新手,我想我没有正确理解所有概念。

问题是:
在我的对话框中,输入所有信息并按下“确定”按钮后,我想得到我刚刚输入的内容TextEdit。但是当我试图EditText通过我得到okButton.onClickListener而不是实例时。findViewById(R.id.myTextEditId)Null

这是一些代码:

对话框的 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.
    }
    })      

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

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

4

2 回答 2

4

dialogView.findViewById 将解决这个问题

于 2013-02-13T21:14:29.117 回答
0

问题是findViewById搜索当前视图层次结构。如果您从您Activity的 .

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

你可能也需要制作dialogView final

于 2013-02-13T21:16:48.203 回答