【发布时间】:2019-06-30 05:37:29
【问题描述】:
我在另一个线程中使用了setVisibility(View.INVISIBLE),但视图消失了,但是当我使用View.GONE 时,应用程序崩溃并出现错误:
只有创建视图层次结构的原始线程才能触及它的 意见。
setVisibility(View.INVISIBLE) 和setVisibility(View.GONE) 都在更新UI 线程时有什么区别?
final Thread thread = new Thread(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.INVISIBLE);
textView.setVisibility(View.GONE);
}
});
更新
我知道INVISIBLE 和GONE 之间的区别。我的意思是为什么INVISIBLE 没有例外,同时它还触及另一个线程中的 UI 元素?
【问题讨论】:
-
两者都不应该在另一个线程中使用。那个成功是纯粹的运气。
-
UI 元素的更新应始终在主线程上完成。
-
setVisibility(View.INVISIBLE)只会使视图不可见。该视图仍然存在,只是不可见,如果您在其上放置一个 clicklistener,如果您单击该位置,它仍然可以工作,但setVisibility(View.GONE);只是使它好像没有视图没有 onclick 会起作用,如果您在此视图下方设置另一个视图,那么该视图将简单地上升,因为该视图不再存在 -
Android UI 更新需要在 MainThread 中完成。发布崩溃日志。
标签: android user-interface view invisible