Android编程:如何在子线程中更新TextView控件

我在子线程中写了一个Socket用于getInputStream,但是怎么样把获得的内容写到UI线程的TextView控件上?求代码,谢谢... 我在子线程中写了一个Socket用于getInputStream,但是怎么样把获得的内容写到UI线程的TextView控件上?求代码,谢谢 展开
 我来答
tn瓶邪
推荐于2016-10-14 · TA获得超过1881个赞
知道小有建树答主
回答量:610
采纳率:98%
帮助的人:112万
展开全部
  步骤:
  1、创建Handler对象(此处创建于主线程中便于更新UI)。
  2、构建Runnable对象,在Runnable中更新界面。
  3、在子线程的run方法中向UI线程post,runnable对象来更新UI。
  代码
  import android.os.Bundle;
  import android.os.Handler;
  import android.os.SystemClock;
  
  import android.app.Activity;
  import android.content.Intent;
  import android.view.Menu;
  import android.view.SurfaceHolder;
  import android.view.View;
  import android.widget.Button;
  import android.widget.TextView;
  public class MainActivity extends Activity {
  private Button button;
  private TextView textview;
  private final int SPLASH_DISPLAY_LENGHT = 1;
  private static int flag = 0;
  private static int count=0;
  private int ab=1;
  private boolean isrun = true;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  button = (Button)findViewById(R.id.button1);
  textview = (TextView)findViewById(R.id.textView1);
  final Handler handler= new Handler();
  
  final Runnable runnable = new Runnable() {
  public void run() {
  textview.setText(Integer.toString(ab));
  }
  };
  

  
  final Thread t = new Thread(){
  //public boolean isrun=true;
  @Override
  public void run() {
  while(isrun)
  {
  handler.post(runnable); //加入到消息队列  这样没有启动新的线程,虽然没有报异常。但仍然阻塞ProgressDialog的显示
  ab++;
  try {
  sleep(1000); //直接调用
  } catch (InterruptedException e) {
  return;
  }
  }
  }
  };
  t.start();
  button.setOnClickListener(new Button.OnClickListener()
  {
  @Override
  public void onClick(View view)
  {
  isrun=false;
  }
  });
  
  
  }
  
  
  }
  
百度网友6099c0b8d
推荐于2017-12-15
知道答主
回答量:3
采纳率:0%
帮助的人:2.7万
展开全部
使用handler:
例:
class yourActivity extends Activity{

private TextView mTextView ; //你的textView
........

........
new Thread()
{
@Override
public void run()
{
.....你的子线程处理逻辑
//下面new一个Message用来装你要传到UI线程的东西
Message msg = new Message();
msg.what = ;
msg.arg1 = ;
msg.obj = ;
//mHandler 见下面定义
mHandler.sendMessage(msg);
}

}

......
//定义一个Handler
Handler mHandler = new Handler(){

@Override

public void handleMessage(Message msg) {
//这里就可以从msg取出你从线程中传到UI线程的东西;
//例如
String txt = (String)msg.obj;
mTextView.setText(txt);

}
}

}

思路是这样了,Handler具体用法,你继续百度吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
reetsea
2018-02-12 · TA获得超过117个赞
知道答主
回答量:170
采纳率:65%
帮助的人:39万
展开全部
TextView tv=xxx;
//not in UI thread
tv.post(new Runable(){
@Override
public void run(){
//update ui widgets here
tv.setText("xxxx");
}
});
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式