1

xmlに 1 つあります。EditText例外はスローされませんが、"kailash"設定したテキストEditTextは表示されません。それは私が空であることを示していますEditText。デバッグでは、コンパイラを実行していることを示していますが、これが機能しないことを知りません。検索ボタンがあり、ダイアログを表示しようとしているボタンがあるという点で単純です。助けてくださいtx1.setText("kailash");。これは私のコードです:--MainActivityonclicksearch

Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.search_dialog);
RelativeLayout layout = (RelativeLayout) MainActivity.this.getLayoutInflater()
                                      .inflate(R.layout.search_dialog, null);
EditText txt1 = (EditText) layout.findViewById(R.id.txt1);
txt1.setText("kailash");
dialog.show();

これは私のxmlコードです:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"  >

 <EditText
        android:id="@+id/txt1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/editbox_background"
    android:textSize="16dp" />
</RelativeLayout>
4

6 に答える 6

1

元の投稿に戻ります。

Kailash さん、コードが最初に XML レイアウトからダイアログのコンテンツ ビューを設定しているようです: dialog.setContentView(R.layout.search_dialog);

...そして、同じリソースの別のインスタンスを別のオブジェクト、レイアウトに膨らませて作成します。

次に、後者のテキスト ビューを変更しますが、Android では前者のビューが表示されます。

これはどう?

EditText txt1 = (EditText)ダイアログ.findViewById(R.id.txt1);

于 2012-09-17T11:23:25.493 に答える
1

成功したとはいえ、この行の交換は魔法のように見えます。実装固有の偶然の一致である可能性があります-回帰が発生しやすいです。レイアウト オブジェクトがキャッシュされる場所など、インフレータの内部に依存する場合があります。コンテンツ ビューとは異なる可能性のあるオブジェクト インスタンスにインフレートすることはできます。現在の実装でたまたま同じである場合、常に同じであるという保証はありますか?

OTOH、dialog .findViewById はより堅牢なようです。アクティビティで行うのとまったく同じように、ダイアログ内のコンポーネントへの参照を取得するだけです。

何か不足していますか?

于 2012-09-17T13:21:41.163 に答える
1
final EditText txt1 = (EditText) findViewById(R.id.txt1);
txt1.setText("kailash");

膨張させたばかりのRelativeLayoutではなく、アクティビティクラスを呼び出しfindViewByIdます(理由はありません)

于 2012-09-17T10:06:00.253 に答える
1

変更することはできませんfinal- それは定数です。final 修飾子なしで定義し、テキストを設定してから、他のインスタンスを final として定義します

于 2012-09-17T10:53:56.163 に答える
0

このようにテキストを設定します

View vv;        
    LayoutInflater  inflater  =  (LayoutInflater) YourClassName.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);     
    vv = inflater.inflate(R.layout.rowrelative, null);      
    EditText  edt =(EditText) vv.findViewById(R.id.editText1);
    edt.setText("Ankit");       
    this.addContentView(vv, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));

ここで、クラス名と Rowxml ファイル名を変更する必要があります

于 2012-09-17T10:16:54.730 に答える
0

実際、解決策は非常に簡単です。私はこのコードを入れていました:

dialog.setContentView(R.layout.search_dialog);
RelativeLayout layout = (RelativeLayout) MainActivity.this.getLayoutInflater()
                                  .inflate(R.layout.search_dialog, null);

このコードの代わりに:

 RelativeLayout layout = (RelativeLayout) MainActivity.this.getLayoutInflater()
                                  .inflate(R.layout.search_dialog, null);
 dialog.setContentView(R.layout.search_dialog);

アクティビティには setcontentView() メソッドに別のレイアウトがあるため、別のレイアウトを認識しないため、最初にインフレータでレイアウトをロードし、それをダイアログの setContentView メソッドに入れて機能させる必要があります。それが誰かに役立つことを願っています。そしてあなたのサポートに感謝します。

于 2012-09-17T11:22:15.610 に答える