0

我的 MainActivity 的 contentView/View 可以通过在调用后的任何地方简单地使用 invalidate() 来刷新:

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 不同的线程中无效。

4

1 回答 1

1

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

此外,您不能在 UI 线程之外执行 UI 操作。您必须invalidate()在 UI 线程上执行,使用类似View.postInvalidate()or的东西Activity.runOnUIThread()

于 2013-03-26T07:32:50.233 回答