使匿名侦听器使用字段变量



这是一个关于Android开发的通用问题的问题,我想解决。有时您有多个按钮/文本视图等,它们都需要连接几乎相同的侦听器。唯一的区别是每个按钮/视图都与不同的字段变量相关联。因此,每个 UI 元素的侦听器都具有完全相同的代码,除了访问/更改的字段变量。

实现此目的的一个可怕方法是进行大量代码复制,因此您为每个按钮复制侦听器的代码,并且只更改所需的变量,但这显然是可怕的解决方案。

我尝试创建一个返回匿名侦听器类的侦听器 creator 方法,但无法弄清楚如何将相关字段变量作为参数传递给 creator 方法,以便匿名侦听器可以使用它们。

如何才能很好地解决这个问题?

如果您的侦听器在其"侦听器"方法中有很多代码,并且您只需要更改为他们有权访问的字段(读/写),则可以执行以下操作。

首先,表示可读/可写事物的接口:

public interface Model<T> {
    T getFieldValue();
    void setFieldValue(T value);
}

然后侦听器使用该东西:

public class TheListener<T> ... {
    private final Model<T> model;
    public TheListener(Model<T> model) {
        this.model = model;
    }
    public void onClick(...) {
        ...
        // read access
        model.getFieldValue();
        ...
        // write access
        model.setFieldValue(v);
        ...
    }
}

然后使用它:

new TheListener<String>(new Model<String>() {
    public String getFieldValue() {
        return field1;
    }
    public void setFieldValue(String v) {
        field1 = v;
    }
});
new TheListener<String>(new Model<String>() {
    public String getFieldValue() {
        return field2;
    }
    public void setFieldValue(String v) {
        field2 = v;
    }
});

等等。

最新更新