0

ダイアログから戻り値を取得しようとしていますが、NPE を取得し続けています。画面にボタンがあるアクティビティがあります。ボタンをクリックすると、入力するフィールドがいくつかあるモーダルが表示されます。情報をメインのアクティビティに戻そうとすると、NPE が爆発します。コードは次のとおりです。

public class FilterActivity extends Activity {
    final Context context = this;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_filter);

        Button addFilter = (Button) findViewById(R.id.addFilter);
        addFilter.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                final EditText et = (EditText) findViewById(R.id.filterName);               
                LayoutInflater inflater = LayoutInflater.from(context);
                View dialog_layout = inflater.inflate(
                        R.layout.dialog_create_filter, null);
                AlertDialog.Builder db = new AlertDialog.Builder(
                        FilterActivity.this);
                db.setView(dialog_layout);

                db.setTitle("Create Filter");
                db.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface d, int which) {     
                                et.getText().toString();
                            }
                        });
                db.show();
            }
        });
      }
    }

EditText (et) から値を取得しようとすると、まだ null です。私は何を間違っていますか?ありがとう。

4

2 に答える 2

1

db.findViewById(R.id.filterName);以下のように追加する必要があります

final EditText et = (EditText) db.findViewById(R.id.filterName);

の代わりに

final EditText et = (EditText) findViewById(R.id.filterName);

完全なコード:

                LayoutInflater inflater = LayoutInflater.from(context);
                View dialog_layout = inflater.inflate(
                        R.layout.dialog_create_filter, null);
                AlertDialog.Builder db = new AlertDialog.Builder(
                        FilterActivity.this);

                db.setView(dialog_layout);
                final EditText et = (EditText) db.findViewById(R.id.filterName); 

                db.setTitle("Create Filter");
                db.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface d, int which) {     
                                et.getText().toString();
                            }
                        });
                db.show();
于 2013-04-10T09:49:33.947 に答える
0

R.id.filterName はどこにありますか?

dialog_create_filter にありますか?

次に、ダイアログを拡張した後でのみ findViewById を呼び出し、dialog_layout ビューを親として使用する必要があります。

こちらもご覧ください: ダイアログから値を返す Android の「ベスト プラクティス」

これが役に立てば幸いです、ヤロン

于 2013-04-10T09:58:52.963 に答える