0

先生、いくつかの editText フィールドを含むカスタム ダイアログを作成し、Listview の選択された項目の値が描画され、EditText の値に設定されます。

しかし、実行になると、次のように常に null になります

    08-29 18:08:06.211: D/dalvikvm(10652): GC_FOR_ALLOC freed 219K, 6% free 21317K/22663K, paused 11ms, total 11ms
08-29 18:08:07.811: D/debug getCovreage Address(10652): 15
08-29 18:08:07.831: D/txtB(10652): null
08-29 18:08:07.831: D/txtFt(10652): null
08-29 18:08:07.831: D/txtFr(10652): null

カスタム editText で editText を初期化し、値を設定し、EditText の値を取得する方法を教えてください。

coverageList.setBackgroundColor(Color.WHITE);                                                                                           
        coverageList.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {

                curservid = resultList.get(arg2).get("Block").toString();
                Log.d("debug getCovreage Address" , curservid);

                final Dialog dialog = new Dialog(EOrderCheckCoverage.this);
                dialog.setContentView(R.layout.custom_coverage_open_order);
                dialog.setTitle("Open Order");

                // set the custom dialog components - text, image and button
                final EditText txtB = (EditText)findViewById(R.id.txtBlock);
                Log.d("txtB" , String.valueOf(txtB));
                final EditText txtFt = (EditText)findViewById(R.id.txtFlat);
                Log.d("txtFt" , String.valueOf(txtFt));
                final EditText txtFr = (EditText)findViewById(R.id.txtBlockFloor);
                Log.d("txtFr" , String.valueOf(txtFr));

                Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
                // if button is clicked, close the custom dialog
                dialogButton.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        String a = txtB.getText().toString();
                        String b = txtFt.getText().toString();
                        String c = txtFr.getText().toString();                                                          
                        dialog.dismiss();
                        Toast.makeText(EOrderCheckCoverage.this, a + " " + b  + " " + c, Toast.LENGTH_LONG).show();
                    }
                });     

                dialog.show();
            }
        });
4

3 に答える 3

2

こうやってみて、

final EditText txtB = (EditText)dialog.findViewById(R.id.txtBlock);

EditText がバインドされているビューを参照していないため、Android は間違った場所でそれを探し、NPE を取得し続けます。ダイアログ オブジェクトを上記のステートメントに追加すると、適切に初期化されます。

于 2013-08-29T10:12:21.910 に答える
1

EditText がダイアログ レイアウトで使用可能な場合は、最初にダイアログ レイアウトの参照を親として使用する必要があります。

したがって、EditText がダイアログで使用可能な場合は、以下のコードのようなものを使用してください。

 // set the custom dialog components - text, image and button
            final EditText txtB = (EditText) dialog.findViewById(R.id.txtBlock);
            Log.d("txtB" , String.valueOf(txtB));
            final EditText txtFt = (EditText) dialog.findViewById(R.id.txtFlat);
            Log.d("txtFt" , String.valueOf(txtFt));
            final EditText txtFr = (EditText) dialog.findViewById(R.id.txtBlockFloor);
            Log.d("txtFr" , String.valueOf(txtFr));

ご不明な点がございましたらお知らせください。

于 2013-08-29T10:22:35.787 に答える
0

日食があなたに言っていることすべてをしないでください^^。オブジェクトをグローバルに定義し、メソッドの本体で初期化します。

そして、将来のために、次のようにアクティビティでメソッドを定義します。

public <T> T castViewById(int id){
    return (T) findViewById(id);
}

その後、次のように書くことができます:

EditText te = castViewById(R.id.myview);
于 2013-08-29T10:20:10.243 に答える