【发布时间】:2019-09-11 08:33:23
【问题描述】:
我正在尝试更新我的RecyclerView 中的一系列项目。基本上,我在列表中的每个项目的可见/消失之间切换视图。我正在尝试使用notifyItemRangeChanged,但它非常慢,并且有明显的 UI 延迟。我的onBindViewHolder 也不是很复杂。我应该在后台线程中为此做些什么吗?
// Called in Activity
mListAdapter.notifyItemRangeChanged(0, mPlayerlist.size());
// My adapter's onBindViewHolder method
@Override
public void onBindViewHolder(@NonNull PlayerHolder holder, int position) {
Log.d("onBind", position + "");
Player player = mPlayerList.get(position);
if (player.isCheckboxVisible()) {
holder.checkbox.setVisibility(View.VISIBLE);
if (player.isIncluded()) {
holder.checkbox.setChecked(true);
} else {
holder.checkbox.setChecked(false);
}
} else {
holder.checkbox.setVisibility(View.GONE);
}
holder.playerNameText.setText(player.getName());
}
我运行一些测试时的更多信息:onBindViewHolder 每个大约需要 0-2 毫秒,并且根据手机大小显示大约 5-10 个项目。 onBindViewHolder 本身看起来执行得相当快,但是所有 onBindViewHolder 依次完成执行的时间却很慢。完成 14 个 onBindViewHolders 需要 0.7 秒。 onBindViewHolder 调用之间存在延迟。
【问题讨论】:
-
onBindViewHolder执行每个项目平均需要多长时间?试过Log.d两个System.currentTimeMillis()的区别? -
屏幕上一次实际显示多少项?
-
@pskink onBindViewHolder 每个大约需要 0-2 毫秒,根据手机大小显示大约 5-10 个项目。 onBindViewHolder 本身看起来执行得相当快,但是所有 onBindViewHolder 依次完成执行的时间却很慢。完成 14 个 onBindViewHolders 需要 0.7 秒。 onBindViewHolder 调用之间存在延迟。
-
".. but the time for all onBindViewHolder to finish ..."- 那么onBindViewHolder被调用了多少次?用什么positions? -
@pskink 它绑定 pos 7-13 然后 0-6
标签: java android android-recyclerview