gpt4 book ai didi

android - ListView Adapter - 何时收集附加到 View 的监听器?

转载 作者:行者123 更新时间:2023-11-29 01:54:07 29 4
gpt4 key购买 nike

我正在使用 Custom ListViewAdapter 来显示一个列表。列表中的每一行都有 3 个按钮,即附加的监听器。但我发现它非常令人不安,在每次滚动期间,都会创建新的 OnClickListeners,即使对于那些存在 convertView 的行,也是作为非空值创建的。

//最常见的转换 View 的方式,据我了解:

public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.listview_item, parent, false);
} else {
view = convertView;
}
final TextView textView = (TextView) view.findViewById(R.id.txtProduct);
textView.setText(name);
textView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
...
}
});
... two more listeners, with the same approach
return view;

根据我使用 Java 的经验,Spider-sense “ting-a-lings” - 似乎创建和丢弃相同的监听器方法是滥用垃圾收集器。不知道老听众是什么时候收的,有没有...

有没有办法使用旧的监听器,而不是创建一个新的监听器? (某种缓存数据结构)

最佳答案

您可以将列表适配器类设置为从 View.OnClickListener 接口(interface)继承。然后,简单地设置

textView.setOnClickListener(this);

并在您的适配器类的 onClick 方法中处理点击。例如,要知道单击了哪一行,请在上面的行之前添加此行:

textView.setTag(position);

然后,在onClick中,您可以通过获取此标记知道您正在处理列表中的哪个位置:

public void onClick(View v) {
Object item = myList.get((Integer) v.getTag());
//handle click event
}

关于android - ListView Adapter - 何时收集附加到 View 的监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16243227/

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