使用数据/内容更新视图的最佳做法?

时间:2017-02-15 15:50:33

标签: c# android xamarin.android

在Android中,何时应该(并且不应该)使用内容更新视图(活动/片段)?

TextView 不应设置来自同一线程 OnCreate() 的文字,正确无误,而是设置在UI线程上(通过将语句发布到UI线程 MessageQueue 来完成)?

95%的观看设置数据( TextViews TabHosts Checkboxes 等等......直接在 OnCreate() (或从它调用的函数)中工作正常,但我现在意识到只是b / c我已经侥幸逃脱它并不意味着它是正确的(是的,我现在得到了一点)。

但是,在UI线程上运行还不够,我发现我需要从 OnResume() 发帖,以便100%保证 { {1}} 会按预期更新。

  1. 以下代码显示了调用 RecordView 的两种方案。是否足以在 UpdateView() 中调用 UpdateView() ,以确保 OnResume() 会显示填充数据正如预期的那样,还是有更好,更正确和/或更好的方式来做这件事?

  2. 此外, RecordView _thisView 是多余的?

  3. _container 是否将 RecordView 称为相同的 {{1显示的是什么??为什么我需要在 OnCreate() 中夸大 RecordView ,然后将其退出?在调用 RecordView (它几乎像工厂模式之类的东西)之前,运营商是否应该自动发生这种情况?

  4. 示例代码

    OnCreate()

1 个答案:

答案 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.xmlFrameLayout。 您为Fragment添加了一个名为frag.xml的布局,其中TextView为<{1}}。

现在_container是FrameLayout,但_thisView是TextView