我目前正在使用此代码让按钮的监听器执行某些操作:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_row, null);
}
Person p = persons.get(position);
if (p != null) {
Button but = (Button) v.findViewById(R.id.buttonId);
but.setText(p.getDescription());
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do stuff
}
});
}
return v;
}
现在我想知道,这对内存管理有好处还是在 Activity 本身中执行 onListItemClick 更好?
最佳答案
Now I wonder , Is this good for memory management
可能会更好。由于列表会滚动并且这些项目会被重复使用,因此您最终将创建大量 OnClickListener
对象并孤立其他对象。这不一定是内存泄漏,因为旧的会被收集,但这仍然不是一个很好的选择。
or is it better to do a onListItemClick in the activity itself?
如果因为列表中的某个项目只有一次点击操作而可以逃脱惩罚,那么您绝对应该坚持使用 OnItemClickListener
来处理列表,而不是自己处理这个问题。
但是,如果您需要创建每个项目的特定部分以使其可单击,或者希望对给定项目执行多个操作,则最好将这些操作收集到单个 OnClickListener
创建一次,然后附加到 getView()
中的每个项目。您可以通过使用 setTag()
将有关单击操作的元数据附加到 View 本身来区分单击了哪个项目。如果此逻辑很复杂,最好为列表项创建自定义 View ,并让 View 本身处理每行的所有点击,而不是尝试在外部处理这些操作。
关于android - 带按钮内存的定制适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13672821/