实现功能:通过点击button,将文字“data”更新为“the data from network”
由于只有主线程Main Thread中才能操作ui,故不建议在子线程中使用TextView.setText();方法。
因此可以通过Handler来处理更新文字。
MainActivity.java文件
package com.joe.handler01;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView textview;
private Button button;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview = (TextView)findViewById(R.id.text);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new Buttonlistener());
handler = new Fhandler();
}
//主线程
class Fhandler extends Handler{
@Override
public void handleMessage(Message msg) {
//system.out.println(Thread.currentThread().getNme());可得知其为主线程
String s = (String)msg.obj;
textview.setText(s);
}
}
//子线程
class NetWorkthread extends Thread{
@Override
public void run() {
//system.out.println(Thread.currentThread().getNme());可得知其为子线程
try {
Thread.sleep(2*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String s = "the data from network";
Message msg = handler.obtainMessage();
msg.obj = s;
handler.sendMessage(msg);
}
}
class Buttonlistener implements OnClickListener{
@Override
public void onClick(View v) {
Thread t = new networkthread();
t.start();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
xml文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="data"/>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text"
android:text="click"/>
</RelativeLayout>