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

DialogsUI threadAndroidの他のすべてのUI操作と同様に、に描画されます。おそらくそれはあなたの問題ではありません。

また、UIスレッドからUI操作を行うことはできません。またはinvalidate()のようなものを使用して、UIスレッドでを実行する必要があります。View.postInvalidate()Activity.runOnUIThread()

于 2013-03-26T07:32:50.233 に答える