gpt4 book ai didi

android - RecyclerView 适配器中的匿名监听器

转载 作者:行者123 更新时间:2023-11-30 00:19:58 27 4
gpt4 key购买 nike

已编辑:

我想知道在 bindViewHolder 方法中创建 Anonymous Listener 是否会导致大型数据集出现任何性能问题。

假设我有一个RecyclerView 适配器。在 bindViewHolder 方法中,如果我将所有监听器设置为匿名,这会导致任何性能问题吗?因为当用户滚动 RecyclerView 时,它会创建大量匿名监听器并将它们设置为 View 。

示例:

view.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
}
});

或者我可以在我的 ViewHolder 类中实现 OnClickListener 并添加到 View 中。就像

view.setOnClickListener(this);

这里没有创建很多匿名监听器。这是否比以前在大型数据集的性能计算中表现更好?

提前致谢。

最佳答案

RecyclerView 只会显示很少的项目,ViewHolder 只会为可见的项目创建,所以即使您的适配器中有数千个项目,也只会显示一小部分ViewHolders 已创建。

但是你必须小心使用 addListener 方法,对于大多数 setListener 方法,你将在项目被回收时一次又一次地设置相同的监听器,这不会只需不到几毫秒,因为它只保留对监听器实现的引用。

但是使用addListener,您必须在添加新监听器之前删除旧监听器。

setListener 的示例是setClickListeneraddListener 的示例是addTextWatcher

//.. part of adapter

private TextWatcher textWatcher;

public void bindViewHolder(DataViewHolder holder, int index){

// no performance issue
holder.button.setClickListener( .... );

// wrong, this is added everytime
holder.editText.addTextWatcher( .... );


// this is safe...
if(textWatcher != null)
holder.editText.removeTextWatcher(textWatcher);

textWatcher = new TextWatcher(){
// ... implementation
};
holder.editText.addTextWatcher(textWatcher);
}

关于android - RecyclerView 适配器中的匿名监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46504192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com