【问题标题】:Is it OK to instantiate OnClickListeners in getView() of BaseAdapter在 BaseAdapter 的 getView() 中实例化 OnClickListener 是否可以
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多