0

問題があります。私は Android アプリを開発する初心者なので、すべての概念を正しく理解できていないと思います。

問題は次のとおりです。
ダイアログで、すべての情報を入力して「OK」ボタンを押した後、フィールドに入力した内容を取得したいと考えていTextEditます。しかし、それをやり遂げようとすると、インスタンスの代わりに取得しEditTextました。okButton.onClickListenerfindViewById(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 に答える