我正在尝试在Android上的某个功能中执行一些步骤。我想告诉用户在没有退出我的功能的情况下在特定时刻发生了什么。类似的东西:
public boolean updateServiceList() {
LinearLayout start = (LinearLayout) findViewById(R.id.start);
LinearLayout major = (LinearLayout) findViewById(R.id.major);
TextView messenger = (TextView) findViewById(R.id.messenger);
Integer i = 0;
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
boolean isOnline = cm.getActiveNetworkInfo().isConnectedOrConnecting();
if(isOnline==false) {
Button exit = (Button) findViewById(R.id.exit_btn);
ProgressBar pg = (ProgressBar) findViewById(R.id.progress);
exit.setText("OK");
exit.setVisibility(View.VISIBLE);
exit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
gMain.this.finish();
}
});
pg.setVisibility(View.GONE);
messenger.setText(R.string.nointernet);
while(isOnline==false) {
i++;
messenger.setText(messenger.getText()+"Try: "+ i.toString);
boolean isOnline = cm.getActiveNetworkInfo().isConnectedOrConnecting();
}
return false;
} else {
isOnline = cm.getActiveNetworkInfo().isConnected();
while (isOnline==false || 1==1) {
isOnline = cm.getActiveNetworkInfo().isConnected();
}
}
return true;
}
我的问题出在“while(isOnline)”,我看不到更新消息。我尝试了 invalidate()和 postInvalidate(),但没有结果。有什么想法吗?
修改
我找到了解决方案!它是: How to refresh a TextView while looping in Android?
The Rackers的回答:
public class myClass extends Activity{
private Handler mHandler;
private TextView text;
private int i;
@Override
public void onCreate(Bundle savedInstanceState) {
text = (TextView) findViewById(R.id.textView01);
i = 0;
mHandler = new Handler();
mHandler.post(mUpdate);
}
private Runnable mUpdate = new Runnable(){ public void run(){
text.setText("My number: " + i);
i++;
mHandler.postDelayed(this, 1000);
}
};}
所以,在我的情况下,如果电流已经解决,我只需要调用其他步骤。如果没有,我只是再次发布步骤......
答案 0 :(得分:0)
你的方法不起作用。
当您拨打messenger.setText()
时,您认为屏幕应该立即更新。你错了。
调用messenger.setText()
时真正发生的事情是消息队列在消息队列上,由主应用程序线程处理。这与您使用while()
循环捆绑的线程相同。当您进入while()
循环时,您的整个用户界面都会被冻结:没有点击,没有更新,没有。
我建议您摆脱while()
循环并随着应用的其余部分一起移动。