Edittext和ProgressDialog不会出现

时间:2013-08-02 18:05:39

标签: java android

我遇到的问题是我的progressdialog没有显示或做任何事情。我正在制作一个转换价值的货币转换器。这是我的代码:

if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length()==0) {
            while (edittextdollars.equals("")) {
                final ProgressDialog myPd_ring=ProgressDialog.show(getActivity(), "", "Loading...", true);
                myPd_ring.setCancelable(true);
                new Thread(new Runnable() {  
                      @Override
                      public void run() {
                            try
                            {
                                convertvalues("USD", "EUR");        
                            }catch(Exception e){

                            }
                            myPd_ring.dismiss();
                      }
                }).start();
            }
        }

没有progressdialog,就像节目一样:

    if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length()==0) {

                convertvalues("USD", "EUR");

}

它可以工作,但在值返回之前按下“计算”按钮几秒钟。我想要一个progressdialog来显示该值正在加载。我搜索过Google,但没有任何效果。关于这个问题的任何帮助表示赞赏。

P.S。我希望你发布代码而不是只是说没有任何代码的解决方案。另外,请发布您认为对我有用的任何网站(如教程)。再次感谢。

编辑:

当我添加此代码时:

if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length()==0) {
            myPd_ring = ProgressDialog.show(getActivity(), "", "Loading...", true, true);
            new Thread(new Runnable() {  
                @Override
                public void run() {
                    try {
                        convertvalues("USD", "EUR");        
                    } catch(Exception e) {

                    }

                }
            }).start();             
        }        

@Override
public void afterTextChanged(Editable arg0) {
    myPd_ring.dismiss();
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    // TODO Auto-generated method stub

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub

}

我已经实现了TextWatcher,但它不起作用。 progressdialog永远停留在那里,价值不会改变。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

你所做的不正确。

while (edittextdollars.equals("")) { // this while loop is not the way to wait for calculation finish...inside this while loop you are spwaning a thread which is not correct
    final ProgressDialog myPd_ring=ProgressDialog.show(getActivity(), "", "Loading...", true);  //here you are showing the dialog
    myPd_ring.setCancelable(true);
    new Thread(new Runnable() { 
        @Override
        public void run() {
            try {
                convertvalues("USD", "EUR");        
            } catch(Exception e) {

            }
            myPd_ring.dismiss(); // the run method can be called within few milliseconds of starting the thread..so in essence immediately you are removing your dialog 
        }
    }).start(); // just after showing the dialog you are starting the thread
}

我建议进行以下更改(我假设您的方法convertvalues是更改edittexteuros文本的方法):

<强> 1。在您的活动类中声明myPd_ring

ProgressDialog myPd_ring = null; 

<强> 2。让您的活动实现TextWatcher(添加未实现的方法)

public class YourActivity extends Activity implements TextWatcher

第3。使用EditText edittexteuros添加TextWatcher。

edittexteuros = (EditText) findViewById(R.id.youreditTextId);
edittexteuros.addTextChangedListener(YourActivity.this);

<强> 4。计算部分并显示对话

if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length() == 0) {
    myPd_ring = ProgressDialog.show(getActivity(), "", "Loading...", true, true);
    new Thread(new Runnable() {  
        @Override
        public void run() {
            try {
                convertvalues("USD", "EUR");        
            } catch(Exception e) {

            }

        }
    }).start();
}

<强> 5。从afterTextChanged

解雇对话
@Override
public void afterTextChanged(Editable arg0) {
    // TODO Auto-generated method stub
    myPd_ring.dismiss();
}

修改

您确定current始终是有效值吗?作为预防措施,您需要在异常情况下显示一些错误文本(您总是需要设置一些文本,否则对话框将永远不会关闭)。请调试并检查您是否始终从网络获得正确的响应。我给你的代码在我的测试设置中完美运行,所以你的问题现在可能在其他地方。您将需要调试并找到它。

YahooCurrencyConverter ycc = new YahooCurrencyConverter();                  
try {
    current = ycc.convert(convertfrom, convertto);
    edittexteuros.setText(df.format(val*current)); 
    return "passed";
} catch (Exception e) {
    edittexteuros.setText("some error message"); 
    return "passed";
}

答案 1 :(得分:0)

if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length()==0) {
             showprogress();
                convertvalues("USD", "EUR");
             dissmissprogress();
}

showprogress(){
 dialog = new ProgressDialog(youractivity.this);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMessage("Please wait...");
dialog.setCancelable(false);
dialog.show()
}
dissmissprogress(){
dialog.dismiss();
}

希望这就是你要找的东西。