2

ダイアログ内に表示しているエディットテキストがありますが、後で(ダイアログが閉じる前に)その中の値を更新していますが、これを行うと、.gettext()から正しい新しい値を読み取ることができますが、エディットテキストはまだ残っています空、なぜ?

これは私のコードです:

public void setText(String url) {
    response.setText("http://xxxx/" + url);
    response.invalidate();
    response.selectAll();
}

私はすべてを試し、答えを何時間も探したように感じますが、試したことは何もうまくいきませんでした。:(

この問題の迅速な解決策はありますか、それともカスタムダイアログ全体を本当に再描画する必要がありますか?

4

3 に答える 3

4

簡単に見ると、

それはすべてうまくいきます、

    EditText input;
@Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);


        input = new EditText(this); 

        AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
        alertDialog.setTitle("Title"); 
        alertDialog.setMessage("Message"); 
        alertDialog.setView(input, 10, 0, 10, 0); // 10 spacing, left and right 

        alertDialog.show(); 

        input.setText("Raja");
        setText("Hindustani");

    }

    public void setText(String url) { 
        input.setText("http://xxxx/" + url); 
        input.invalidate(); 
        input.selectAll(); 
    } 

このコードセットは完全に正常に機能します。問題はありません。もう一度確認してください。

この問題が発生する方法をお知らせするには、ここに完全なコードを入力する必要があります。

于 2012-04-16T12:36:00.360 に答える
1

いくつかのタスクが完了した後にTextViewのテキストを別のスレッドから変更しようとしている場合は、Handlerを使用する必要があります。そうしないと、奇妙なエラーが発生する可能性があります。

EditText input;
Thread myWorkerThread;
AlertDialog alertDialog;

Handler successHandler = new Handler()
{
    @Override
    public void handleMessage(Message message)
    {
        setText("Success Message");
    }
};

public void setText(String url)
{
    input.setText("http://xxxx/" + url);
    input.invalidate();
    input.selectAll();
}

@Override
public void onCreate(Bundle icicle)
{
    super.onCreate(icicle);
    setContentView(R.layout.main);

    input = new EditText(this);

    myWorkerThread = new Thread()
    {
        public void run()
        {
            // do your tasks here

            // after task is done, call the handler
            successHandler.sendEmptyMessage(0);
        }
    };
}

myWokerThreadを開始する前に、alertdialogを表示してください。

alertDialog = new AlertDialog.Builder(MyActivity.this).create();
alertDialog.setTitle("Title");
alertDialog.setMessage("Message");
alertDialog.setView(input, 10, 0, 10, 0); // 10 spacing, left and right
alertDialog.show();
myWorkerThread.start();
于 2012-04-23T11:26:35.737 に答える
0
AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
alertDialog.setTitle("Title"); 
alertDialog.setMessage("Message"); 

EditText input = new EditText(YourActivity.this);
input.setText("NAME");

alertDialog.setView(input, 10, 0, 10, 0); // 10 spacing, left and right 
alertDialog.setPositiveButton("ok", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int whichButton) {
      //some_string_instance = input.getText().toString();
   }
});
alertDialog.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int whichButton) {

   }
});

alertDialog.show(); 

2つのボタンでアラートダイアログを使用できます。ポジティブボタンをクリックすると、edittextの値が文字列変数に保存され、後でコードで使用できます...メソッドがsetText(some_string_instance)であるとします。

このリンクを参照してください

于 2012-04-21T06:40:48.723 に答える