什么时候不使用 ViewHolder 模式?
When not to use ViewHolder pattern?
ViewHolder
模式的目的是帮助回收视图。如果在我的列表中每一行都有不同的布局怎么办?在我的例子中,我有一个 GridView
,两行有 6 个元素。每个元素都有完全不同的布局,并呈现出不同的东西。在这种情况下,有什么理由我仍然应该实施 ViewHolder
吗?
一直调用 findViewbyId()
方法以在布局中引用小部件会大大降低应用程序性能。 ListView
或 RecyclerView
的平滑滚动需要使用 ViewHolder
以减少引用时间并有助于平滑滚动。
根据您的问题,如果每一行都有不同的布局,那么您需要为每个布局创建单独的 ViewHolder
对象。然后,在向其中填充数据时,您需要确定当前位置需要使用哪个 ViewHolder
。这可能会使您的代码有点复杂,但它会显着提高应用程序性能。
有关 ViewHolder 的更多信息,请访问以下 link:Hold View Objects in a View Holder
当您覆盖 geitemviewtype 时,ListView 保证为该类型的数据传递正确的 convertview。 GetTag 也可以与多种视图类型一起正常工作,并且仍然会一直阻止调用 getItemById,从而提高性能。所以在我看来:是的,你仍然应该使用 viewholder 模式。
ViewHolder
模式的目的是帮助回收视图。如果在我的列表中每一行都有不同的布局怎么办?在我的例子中,我有一个 GridView
,两行有 6 个元素。每个元素都有完全不同的布局,并呈现出不同的东西。在这种情况下,有什么理由我仍然应该实施 ViewHolder
吗?
一直调用 findViewbyId()
方法以在布局中引用小部件会大大降低应用程序性能。 ListView
或 RecyclerView
的平滑滚动需要使用 ViewHolder
以减少引用时间并有助于平滑滚动。
根据您的问题,如果每一行都有不同的布局,那么您需要为每个布局创建单独的 ViewHolder
对象。然后,在向其中填充数据时,您需要确定当前位置需要使用哪个 ViewHolder
。这可能会使您的代码有点复杂,但它会显着提高应用程序性能。
有关 ViewHolder 的更多信息,请访问以下 link:Hold View Objects in a View Holder
当您覆盖 geitemviewtype 时,ListView 保证为该类型的数据传递正确的 convertview。 GetTag 也可以与多种视图类型一起正常工作,并且仍然会一直阻止调用 getItemById,从而提高性能。所以在我看来:是的,你仍然应该使用 viewholder 模式。