在Android中,何时应该(并且不应该)使用内容更新视图(活动/片段)?
TextView
不应设置来自同一线程 OnCreate()
的文字,正确无误,而是设置在UI线程上(通过将语句发布到UI线程 MessageQueue
来完成)?
95%的观看设置数据( TextViews
, TabHosts
, Checkboxes
等等......直接在 OnCreate()
(或从它调用的函数)中工作正常,但我现在意识到只是b / c我已经侥幸逃脱它并不意味着它是正确的(是的,我现在得到了一点)。
但是,在UI线程上运行还不够,我发现我需要从 OnResume()
发帖,以便100%保证 { {1}} 会按预期更新。
以下代码显示了调用 RecordView
的两种方案。是否足以在 UpdateView()
中调用 UpdateView()
,以确保 OnResume()
会显示填充数据正如预期的那样,还是有更好,更正确和/或更好的方式来做这件事?
此外, RecordView
_thisView
是多余的?
_container
是否将 RecordView
称为相同的 {{1显示的是什么??为什么我需要在 OnCreate()
中夸大 RecordView
,然后将其退出?在调用 RecordView
(它几乎像工厂模式之类的东西)之前,运营商是否应该自动发生这种情况?
示例代码:
OnCreate()
答案 0 :(得分:1)
您应该在OnCreateView(..)
中显示初始数据或一些加载动画,在后台加载数据,然后在主线程可用后发布实际内容,i .E。:
new Handler(Looper.GetMainLooper()).post(() => {
//update views here
});
此外,在View's
中设置OnCreateView(..)
内容如果您使用其中一种View.set(..)
方法,则TextView.setText(..)
总是有效。
这是因为setters在视图上调用了invalidate()
,而视图又会重新绘制视图。
在TextView's
中设置OnCreateView(..)
文字的设计无法在屏幕上更新。
我擅长提醒 不,_thisView与_container不同。 _thisView是_container的直接子项。
考虑一下:
您的主要layout.xml
是FrameLayout
。
您为Fragment
添加了一个名为frag.xml
的布局,其中TextView
为<{1}}。
现在_container是FrameLayout
,但_thisView是TextView
。