在非主執行緒非MainActivity中更新Toast、ImageView等UI控制元件方法
阿新 • • 發佈:2018-12-10
首先需要明確一點就是UI只能在主執行緒中更新,其他地方想更新UI,我目前學到的有兩種方法: 1.採用handler的方式
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); } }