刷新函数内的视图

时间:2011-04-15 15:44:54

标签: java android view

我正在尝试在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);

}

};}

所以,在我的情况下,如果电流已经解决,我只需要调用其他步骤。如果没有,我只是再次发布步骤......

1 个答案:

答案 0 :(得分:0)

你的方法不起作用。

当您拨打messenger.setText()时,您认为屏幕应该立即更新。你错了。

调用messenger.setText()时真正发生的事情是消息队列在消息队列上,由主应用程序线程处理。这与您使用while()循环捆绑的线程相同。当您进入while()循环时,您的整个用户界面都会被冻结:没有点击,没有更新,没有。

我建议您摆脱while()循环并随着应用的其余部分一起移动。