2

我有一个在对话框中显示的edittext,但后来(在对话框关闭之前)我正在更新其中的值,但是当我这样做时,我可以从 .gettext() 读取正确的新值,但 edittext 仍然空的,为什么?

这是我的代码:

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 = 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(); 

您可以使用带有两个按钮的警报对话框,并在正面按钮上单击您将 edittext 的值保存到某个字符串变量,并可以稍后在您的代码中使用它...假设您的方法是 setText(some_string_instance)..

参考这个链接

于 2012-04-21T06:40:48.723 回答