Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我们什么时候使用recyclerView.setHasFixedSize?_Android - Fatal编程技术网

Android 我们什么时候使用recyclerView.setHasFixedSize?

Android 我们什么时候使用recyclerView.setHasFixedSize?,android,Android,事情是这样的: 有人知道setHasFixedSize方法吗?有人说,如果所有项目的大小相同,它允许进行优化。在android.support.v7.widget中的RecyclerView类中,它评论道:如果RecyclerView能够提前知道 适配器内容无法更改RecyclerView本身的大小。如果您对RecyclerView的使用属于此类别,请将其设置为true 那是什么意思?有谁能告诉我使用它的上下文,或者解释一下上面“这个类别”的含义吗? 非常感谢。setHasFixedSize()

事情是这样的: 有人知道setHasFixedSize方法吗?有人说,如果所有项目的大小相同,它允许进行优化。在android.support.v7.widget中的RecyclerView类中,它评论道:如果RecyclerView能够提前知道 适配器内容无法更改RecyclerView本身的大小。如果您对RecyclerView的使用属于此类别,请将其设置为true

那是什么意思?有谁能告诉我使用它的上下文,或者解释一下上面“这个类别”的含义吗? 非常感谢。

setHasFixedSize()用于让回收视图保持相同的大小

此信息将用于优化自身

这里是参考网址

示例:

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
recyclerView.setHasFixedSize(true);

对于RecyclerView来说,了解其大小(宽度和高度尺寸)是否取决于适配器内容以避免昂贵的布局操作是很有趣的。如果RecyclerView事先知道其大小不取决于适配器内容,则它将跳过检查其大小是否应在每次从适配器添加或删除项目时更改。这一点尤其重要,因为插入和删除元素的情况非常常见

如果RecyclerView的大小(RecyclerView本身)

不依赖于适配器内容:

mRecyclerView.setHasFixedSize(true);
mRecyclerView.setHasFixedSize(false);
取决于适配器内容:

mRecyclerView.setHasFixedSize(true);
mRecyclerView.setHasFixedSize(false);
如果您查看,您将看到更多详细信息,因为到目前为止,mHasFixedSize在该类中的很多地方都没有使用


将其设置为true并不意味着RecyclerView大小是固定的,只是意味着它不会因为适配器内容的更改而更改。例如,RecyclerView的大小可能会因为其父对象的大小更改而更改。

文档对此进行了解释<如果能够提前知道适配器内容的更改不能更改RecyclerView本身的大小,则code>RecyclerView可以执行多个优化。如果您使用的RecyclerView属于这一类,请将其设置为true。对不起,我真的不明白下面的话:“适配器内容中的更改”不能更改RecyclerView本身的“大小”。如果您对RecyclerView的使用属于此类别,请将其设置为true。什么样的变化,是它的大小?如果是,那么“大小”是什么意思?大多数情况下,它们是“匹配父母”。所以RView高度将是屏幕高度,我应该使用setHasFixedSize为真,这是“类别”吗?是的。这并不难理解。好的,请再问一个问题,“match_parent”会通过,因为recyclerview中的项目重用和预加载机制,但是如果高度是“wrap_content”或项目计数小于屏幕高度怎么办?我只是跟踪了recyclerview类的源代码,仍然无法了解这个“fixedsize”方法的基本优化思想如果数据来自服务器,并且它的大小通常是意外的,在这种情况下,我们最好不要将该方法设置为真,我是这样吗?因此,我得出这样的结论:如果有20个图标,我想把它们放在循环视图中,这是最好的“类别”设置方法。请纠正我。我认为解释误导。方法setHasFixedSize(true)可以使用,只要RV不因其内容而更改其大小。术语“大小”重载表示3件事:帧的大小(即滚动视图)、布局大小(即可滚动区域)或项目数。非常清楚,此方法指的是第一种方法,通常是
match_parent
。正如@Maarten所说,如果我们有一个高度为match_parent的RecyclerView,我们应该添加setHasFixedSize(true),因为RecyclerView本身的大小不会改变向其中插入或删除项目的情况。如果我们有一个包含wrap_内容的RecyclerView,这应该是错误的,因为适配器插入的每个元素都可能根据插入的项目更改回收器的大小,因此,每次添加/删除项目时,回收器的大小都会不同。如果
布局_高度
=“0dp”使其填充可用空间,会发生什么?它不会随着添加/删除内容而改变,但每个屏幕上的大小都不一样。Gastón Saillén:我有一个用例,我将高度设置为匹配父级,如果我设置了setHasFixedSize(true),则不会显示内容,但如果设置了setHasFixedSize(false),则会显示项目。我用高度作为包装内容和匹配父项进行了测试。这没什么区别。这只决定了视图的高度,而不是所有的3件事-->项目的数量、框架的大小、布局的区域..如果我们有一个可扩展的RecyclerView,带有height=“match\u parent”,但项目布局有它的高度,意味着height=“wrap\u content”,那么这个设置应该是什么呢?