我使用RecyclerView
作为列表。 RecyclerView
的每个布局项都有Button
。这个按钮应该保存一些数据(我绑定到视图)。
我认为,由于每个视图项中都有相同的按钮,为什么不能有一个我可以绑定到所有按钮的静态侦听器实例。因为那样可以节省一些内存。
现在,关于听众(View.OnClickListener()
)的一些观点:
RecyclerView.Adapter
类的静态成员,并在绑定第一个项目时实例化一次。onBindViewHolder(ViewHolder, int position)
)onClick(View v)
方法中,我访问要绑定的数据。使用此方法中提供的位置(onBindViewHolder(ViewHolder, int position)
)从存储为适配器源的数据对象列表中检索此数据。现在,问题:
当我点击按钮并检查听众将保存哪个项目时,我发现RecyclerView
中的第一个数据条目是与任何项目的点击相对应保存的数据条目RecyclerView
。
我不知道为什么会这样。任何人都可以找到它的原因吗?
其次,这是一个为多个列表项设置单个侦听器的好策略吗?
注意: 我无法发布代码。对此感到抱歉。
答案 0 :(得分:0)
Recyclerview
的第一项获得回复,那么要在getAdapterPosition()
班级或ViewHolder
和{{onBindView()
使用getTag()
来获取实际位置1}}也可以帮助获取确切的数据RecyclerView
(顾名思义)会回收其子视图,因此没有与内存相关的问题。 答案 1 :(得分:0)
处理RecyclerView点击的最佳方法是:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.list_item, parent, false);
final ViewHolder viewHolder = new ViewHolder(view);
viewHolder.actionButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int itemPosition = viewHolder.getAdapterPosition();
handleActionButtonClick(itemPosition);
}
});
return viewHolder;
}
简单而强大。拥有所有项目的单击侦听器是过度优化的极端示例。这几个额外的字节永远不会重要,而且需要额外的样板费用。