2013-03-26 88 views
0

我的MainActivity的内容查看/视图可以通过简单地使用无效()被刷新外的调用之后的任意位置:无效和ImageView的在MainActivity线程

setContentView(R.layout.activity_main); 

但如果我打电话给一个对话框,在我的项目中进行选择:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch(item.getItemId()){ 
    case R.id.menu_tools: 
     showDialog(); 
     return true; 
      ... 

这样做不会刷新对话框内的ImageView:

public class ToolSettingsDialog extends Dialog { 
       ... 
private void updatePreview() { 
    ImageView image = (ImageView)findViewById(R.id.widthImageView); 

    Bitmap bitmap = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    bitmap.eraseColor(Color.WHITE); 

    Drawing d = null; 
    d = box.getDrawing(); 
    s.draw(paint, canvas); 
    image.setImageBitmap(bitmap); 
    image.invalidate();  
} 

我一直在寻找周围,我似乎无法理解如何在UI之外的其他线程无效。

回答

1

Dialogs绘制在UI thread上,类似于Android上的所有其他UI操作。所以这可能不是你的问题。

此外,您不能在UI线程中进行UI操作。你将不得不在UI线程上执行invalidate(),使用类似View.postInvalidate()Activity.runOnUIThread()的东西。

+0

是否可以展开runOnUiThread()应该如何在我的Dialog类中使用? – Androidus 2013-03-26 20:29:37

+0

@Androidus我更新了我的答案。你可以尝试'image.postInvalidate()'。 – Tushar 2013-03-26 20:33:22