ContentView / View My MainActivity можно обновить, просто используя 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();
}
Я искал все вокруг и, похоже, не могу понять, как сделать недействительным в другом потоке, чем в пользовательском интерфейсе.
1 ответ
Dialogs
рисуются на UI thread
, как и все другие операции пользовательского интерфейса на Android. Так что, вероятно, это не ваша проблема.
Кроме того, вы не можете выполнять операции пользовательского интерфейса вне потока пользовательского интерфейса. Вам нужно будет выполнить invalidate()
в потоке пользовательского интерфейса, используя что-то вроде View.postInvalidate()
или Activity.runOnUIThread()
.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.
image.postInvalidate()
.