可以在BaseAdapter的getView()中实例化OnClickListeners

时间:2014-05-01 22:50:36

标签: android baseadapter

所以我有一个扩展BaseAdapter的自定义适配器。在getView()函数中,我实例化了一些OnClickListeners来处理列表索引(对于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是否正常?感谢

1 个答案:

答案 0 :(得分:0)

我认为在OnClickListeners中创建匿名getView()是个问题。 OnClickListener毕竟非常轻量级。我经常这样做。如果您遇到具体的性能问题,我只会将其更改为您提及的其他方法。