0

カスタム AlertDialog からテキストを取得することに関して行き詰まっています。「NullPointerException」というエラーが発生します。AlertDialog で EditText を含む変数の定義を移動しましたが、同じエラーが発生します。

XML「pin.xml」の私のレイアウト項目

<EditText
    android:id="@+id/insert_pin"
    android:layout_width="90dp"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:ems="10"
    android:gravity="center"
    android:inputType="numberPassword"
    android:maxLength="4" />

アラートダイアログ

        new AlertDialog.Builder(this)
        .setView(inflater.inflate(R.layout.pin, null))
        .setTitle("Save PIN")
        .setPositiveButton("Save", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                pin = (EditText) findViewById(R.id.insert_pin);
                //here I get the Error. Apparently, it can't get the value
                input = pin.getText().toString();

                dialog.cancel();
                go();
            }
        })
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                dialog.cancel();
                finish();
            }
        })
        .show();

どんな助けでも大歓迎です。

4

4 に答える 4

4

findViewById() を使用して EditText Field オブジェクトを見つけるため、コードを変更する必要がありますが、Dialog View に関しては findViewById() を使用する必要があります。

コードを次のように変更します。

View v = inflater.inflate(R.layout.pin, null);


new AlertDialog.Builder(this)
        .setView(v)
        .setTitle("Save PIN")
        .setPositiveButton("Save", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                pin = (EditText)v.findViewById(R.id.insert_pin);
                //here I get the Error. Apparently, it can't get the value
                input = pin.getText().toString();

                dialog.cancel();
                go();
            }
        })
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                dialog.cancel();
                finish();
            }
        })
        .show();
于 2013-01-11T09:26:44.890 に答える
1

使用する

pin = (EditText)v.findViewById(R.id.insert_pin);
input = pin.getText().toString();

insert_pin からテキストを取得EditTextするには、ダイアログ コンテキストを使用する必要があります

于 2013-01-11T09:26:38.493 に答える
0

このようにコードを書いてください

    AlertDialog alert=new AlertDialog.Builder(this);

    alert.setView(inflater.inflate(R.layout.pin, null));
    alert.setTitle("Save PIN");

    alert.setPositiveButton("Save", new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int id){
            pin = (EditText)alert.findViewById(R.id.insert_pin);
            //error will be solved
            input = pin.getText().toString();

            dialog.cancel();
            go();
        }
    });
    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int id){
            dialog.cancel();
            finish();
        }
    });
    alert.show();
于 2013-01-11T09:29:13.983 に答える
0

これを使って:

pin = (EditText)dialog.findViewById(R.id.insert_pin);
input = pin.getText().toString();
于 2013-01-11T09:36:24.377 に答える