メインスレッド以外のMainActivityでToast、ImageViewなどのUIコントロールメソッドを更新
1899 ワード
まず、UIはメインスレッドでしか更新できないことを明確にする必要があります.他の場所ではUIを更新したいと思っています.私が今学んだ方法は2つあります.1.handler方式を採用する
2.修正したいUI名をメソッドのパラメータに入れると、メソッドでUIを修正することができ、このメソッドを呼び出すと更新UI(1)メインスレッドを実現することができる.
(2)imageViewを更新したいクラスMyBitmapUtilsで
public class MainActivity extends Activity{
......
ImageView imageView;
......
protected void onCreate(Bundle savedInstanceState) {
......
imageView=(ImageView) findViewById(R.id.imageView_background);
}
......
// imageShow imageView
private void imageShow(Bitmap bitmap) {
Message msg=new Message();
msg.what=0;
msg.obj=bitmap;
handler.handleMessage(msg);
}
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
imageView.setImageBitmap((Bitmap) msg.obj);
break;
case 1:
break;
}
}
};
}
2.修正したいUI名をメソッドのパラメータに入れると、メソッドでUIを修正することができ、このメソッドを呼び出すと更新UI(1)メインスレッドを実現することができる.
public class MainActivity extends Activity{
......
ImageView imageView;
......
protected void onCreate(Bundle savedInstanceState) {
......
imageView=(ImageView) findViewById(R.id.imageView_background);
MyBitmapUtils myBitmapUtils=new MyBitmapUtils(imageView);// imageView
}
}
(2)imageViewを更新したいクラスMyBitmapUtilsで
public class MyBitmapUtils {
......
ImageView imageView;
......
public MyBitmapUtils(ImageView imageView){
this.mageView=mageView;
}
public void changeImageView(ImageView imageView,Bitmap image){
imageView.setImageResource(res.drawable.image);// imageView
}
public void dosomething{
// changeImageView imageView
hangeImageView(imageView , image1);
}
}