【发布时间】:2014-05-01 22:50:36
【问题描述】:
所以我有一个扩展 BaseAdapter 的自定义适配器。在 getView() 函数中,我实例化了一些 OnClickListener 来处理列表索引内的视图(对于 ListView)的 onClick 事件。这是一个例子:
public class CustomAdapter extends BaseAdapter {
private ArrayList<SomeObject> mObjectArray;
private LayoutInflater mInflater;
// ...
public View getView(int position, View convertView, ViewGroup parent) {
final SomeObject obj = mObjectArray.get(position);
convertView = mInflater.inflate(R.layout.custom_layout, null);
TextView textView = TextView) convertView.findViewById(R.id.custom_text1);
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
textView.setText(obj.getText());
}
});
// ...
return convertView;
}
}
它工作正常,但我担心从性能角度不建议这样做?为 CustomAdapter 类设置一个 OnClickListener 并使用 TextView.setTag() 和 TextView.getTag() 自定义它会更好吗?如下:
public View getView(int position, View convertView, ViewGroup parent) {
// ...
textView.setTag(obj);
textView.setOnClickListener(oneOnClickListener);
// ...
}
// ...
// One OnClickListener to handle all onClick events for textView
OnClickListener oneOnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
SomeObject obj = v.getTag();
textView.setText(obj.getText());
}
});
或者在 getView() 函数中实例化新的 OnClickListener 是否可行?谢谢
【问题讨论】:
-
它不会影响性能,但您当前的适配器实现效率不高。如果
convertView == null,您只需要扩展布局并获取对子视图的引用,并且您还应该使用持有人模式。 Here's an example -
谢谢,但我已经知道并且已经实现了。为了简单起见,我从上面的示例代码中省略了它,这也是我省略了其他东西的原因,比如构造函数和其他必需的函数。 :)
标签: android baseadapter