2016-04-21 63 views
2

ViewHolder模式的用途是帮助回收视图。如果在我的列表中,我对每一行都有不同的布局。在我的情况下,我有一个GridView两行6个元素。每个元素都有完全不同的布局,并提供其他内容。在这种情况下,我是否应该继续执行ViewHolder何时不使用ViewHolder模式?

+0

在所有时刻都能看到6个视图吗? – jobbert

+0

@jobbert好吧,其中4个是。他们每10秒刷新一次。 – Booyaches

回答

2

调用findViewbyId()方法一直在布局中引用窗口小部件会显着降低应用程序的性能。为了平滑滚动ListViewRecyclerView,需要使用ViewHolder,这减少了参考时间并有助于平滑滚动。

根据你的问题,如果你对每一行有不同的布局,那么你需要为每个布局创建单独的ViewHolder对象。然后,在您将数据充入其中时,您需要确定您需要为当前位置使用哪个ViewHolder。这可能会使你的代码有点复杂,但它大大提高了应用程序的性能。

有关ViewHolder更多信息,请访问以下链接:Hold View Objects in a View Holder

+0

请参阅http://daniel-codes.blogspot.com/2013/11/is-findviewbyid-slow.html,'findViewbyId'不会''显着减慢应用程序性能“ - 实际上没有Google的android.widget .ListAdapter的使用查看模式 – pskink

+0

检查我在上面的答案中提供的文档的链接。在文档中,写道findViewById()会降低应用程序的性能。 –

+0

那么告诉我,如果Google家伙不关心性能,因为它们的ListAdapter都不实现该模式? – pskink

1

的ListView保证在正确的convertview通过该类型,当你重写geitemviewtype数据。 GetTag也可以在多种视图类型下正常工作,并且仍然会阻止始终调用getItemById,从而提高性能。所以在我看来:是的,你仍然应该使用视图模式。

相关问题