我遇到的问题是我的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永远停留在那里,价值不会改变。任何帮助将不胜感激。
答案 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();
}
希望这就是你要找的东西。