- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的 onBindViewHolder 方法,它针对 recyclerView 中的每一行运行。我一次有大约 500 到 600 行。我正在做的是
1 - 初始化我的 Parcelable POJO 类对象
2 - 将此对象作为 Intent 参数传递以在 onItemClick 事件发生时启动另一个 Activity 。
据我所知,Java 不支持真正的闭包,因此,如果您想在内部类中使用它,它会强制我们将对象/变量设为 final。 Java 通过将常量值存储在隐藏变量中来模仿闭包行为,并在以后需要时引用这些值。
我想知道的,
在 onBinderViewHolder 方法中为每一行创建一个对象在性能/内存方面是否合适?
当这些对象被垃圾收集时?
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
final Cursor cursor = getItem(position);
final FF_Task_List task = new FF_Task_List();
task.setSiteArea(cursor.getString(TaskListEntry.TaskListQuery.SITE_AREA));
task.setSiteCode(cursor.getString(TaskListEntry.TaskListQuery.SITE_CODE));
task.setValidOn(cursor.getString(TaskListEntry.TaskListQuery.VALID_ON));
task.setScore(cursor.getFloat(TaskListEntry.TaskListQuery.SCORE));
task.setSurveyStatusId(cursor.getInt(TaskListEntry.TaskListQuery.SURVEY_STATUS_ID));
task.setTokenId(cursor.getLong(TaskListEntry.TaskListQuery.TOKEN_ID));
task.setEmpId(cursor.getLong(TaskListEntry.TaskListQuery.EMP_ID));
task.setSurveyTypeId(cursor.getInt(TaskListEntry.TaskListQuery.SURVEY_TYPE_ID));
final int scoreTextLength = String.valueOf(task.getScore()).length();
final float score = task.getScore();
final int scoreColor = Utilities.getColorByStatus(mContext, task.getSurveyStatusId());
final int statusIcon = Utilities.getIconByStatus(task.getSurveyStatusId());
final String validOnDate = Utilities.formatDBDate(task.getValidOn(), Utilities.Dates.DISPLAY_DATE);
sb = new SpannableStringBuilder(task.getScore() + "%");
sb.setSpan(new StyleSpan(Typeface.NORMAL), scoreTextLength, scoreTextLength + 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
holder.siteName.setText(task.getSiteArea());
holder.siteCode.setText(task.getSiteCode());
holder.siteInfo.setText(validOnDate);
holder.siteScore.setTextColor(scoreColor);
if(score != 0) {
holder.siteScore.setPadding(5,0,0,0);
holder.siteScore.setText(sb);
}else{
holder.siteScore.setText("--");
}
holder.siteScoreProgress.setPercent(score / 100);
holder.siteStatusIcon.setImageResource(statusIcon);
holder.taskItem.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//raise custom itemClick event
itemClickListener.itemClicked(task ,v);
}
});
}
最佳答案
由于您将模型存储在列表中,因此每次在 onBindViewHolder(ViewHolder holder, int position)
中调用 getItem(position)
时,您都会获得该值。
RecyclerView
随时控制内存中保存的内容,因此当您滚动 RecyclerView
时,内容( View 和模型)将在需要时进行垃圾收集.
我不知道 Android 会在任何给定时间为您在内存中保留多少项目,但它只不过是屏幕上可见的项目 - 然后它可能会在创建的 View 之外保留一些项目。在手机上,这通常是 10-15 个项目,具体取决于屏幕大小和项目的大小。
然后,当您再次滚动回相同的 View 时,将再次重新创建模型,并且 ViewHolder
将更新为新创建的值。
除非您的数据模型很大,否则在 onBindViewHolder(ViewHolder holder, int position)
中创建对象应该不是问题。
如果您想避免在 onBindViewHolder
中创建对象,请将 Cursor
转换为您的 FF_Task_List
对象并设置 FF_Task_List 列表
到 RecyclerView
的支持模型。
关于android - 在 recyclerview OnBindViewHolder 方法中为每一行创建 POJO 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35561511/
我正在开发我的应用程序,它要求电影海报的比例为 1:2。我找到了一种方法来做到这一点就是运行 movieAdapterViewHolder.posterview.requestLayo
我在 CardAdapter 中使用 onBindViewHolder。它包括 checkedTextView 的 onClick 方法。我试图获取这些文本并将其放入 Arraylist(shared
在适配器 submitList 到 DiffUtil 之后,调用 onBindViewHolder 并且出于某种原因它总是将列表滚动到顶部。 我尝试了 SO 中关于在 recyclerview 更新列
我收到错误:“FlickrRecyclerViewAdapter”类必须声明为抽象类或在“适配器”中实现方法抽象方法 onBindViewHolder(VH, int) 虽然这个错误应该是 self
我有一个 recyclerview 显示我的数据。在我的适配器类中,在 onBindViewHolder() 中,我为一个按钮创建了一个监听器,该按钮在单击时删除了一行。第一次工作得很好,但如果我尝试
如果图像不存在,我将尝试下载它们;如果已经下载,我将尝试保留并重新使用它们。 下载和展示作品时,不会重复使用它们。似乎 mValues 在不同的调用中不是相同的 mValues。 这是我的代码 pub
我已经将第三方库用于进度条,一切正常,但在 onBindViewHolder 方法中,当我编写 holder.donutprogress.setFinishedStrokeColor(colorsda
ViewPager 发布 1.0.0 版本 对于普通的 RecyclerView,holder.itemView给我当前绑定(bind)/渲染的 View 。 但是,FragmentStateAdap
我想在下一类 ChildViewHolder 的 onBindViewHolder 中访问 DayOfWeek,这样我就可以在 if 语句中使用它,如 ChildRecyclerAdapter 中所示
我在recycview中有很多按钮我只是想将它们添加到数组中,然后让它们添加一些工作。 首先我定义了数组名称“buttons”ToggleButton 按钮[] = new ToggleButton[
当我调用notifyDataSetChanged()时,它不会调用我的onBindViewHolder,我不知道它为什么这样做,我当前正在使用自定义布局,不知道这是否与它有关。 有人有什么想法吗?这是
我有一个TestActivity: public class TestActivity extends AppCompatActivity { @Override protected
我想填写诸如用户名、全名之类的内容,显示 follow_btn 的可见性。最大的问题是我不能在 onbindviewholder 中使用。它用红色下划线标出。你能帮我吗? 错误是:error: can
我正在尝试使用 RecyclerView 显示一个左侧有图像、右侧有标题的列表。 通过 for 循环,我在 ArrayList 中添加了标题和图像 String[] mtitles = {"Title
您好,当 recyclerview 第一次创建 OnbindViewHolder 时,我遇到了一个奇怪的问题,直到 recyclerview 中的最后一个项目被调用,然后当我滚动时OnbindView
onBindViewHolder 在数据绑定(bind)到 View 后的第一个位置和最后一个位置意外调用。这造成了问题,因为当我尝试向列表中添加项目时,最后一项的 ImageViews(相似和不同)
设置 我有一个带有自定义适配器和自定义 ViewHolder 的 RecyclerView。 我理解 onCreateViewHolder() 方法在 RecyclerView 用完 ViewHold
我知道这个问题已被多次询问与 ListViews 有关,但我一直无法真正理解解决方案。我知道 RecyclerViewAdapter 中 onBindViewHolder() 的位置参数类似于 lis
我已经将 RececlerView 与 ViewHolder 模式结合使用了一段时间。我正在实现自定义 Adapter。 我不是在我的代码中搜索特定的错误帮助。 我只是想知道,如果它是正常的,onBi
当我在我的 RecyclerView 上调用 notifyItemChanged() 时,相应的 Views(在本例中为按钮)没有按预期更新.我调用他们的原因是数据已经改变,这会导致他们的背景颜色改变
我是一名优秀的程序员,十分优秀!