java - 让匿名监听器使用字段变量

标签 java android listener

这是我想解决的 Android 开发的一般问题的问题。有时你有多个按钮/ TextView 等,它们都需要几乎相同的监听器。唯一的区别是每个按钮/ View 都与不同的字段变量相关联。因此,每个 UI 元素的监听器都具有完全相同的代码,除了访问/更改哪些字段变量。

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

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

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

最佳答案

如果您的监听器在其“监听器”方法中有很多代码,而您只需要更改他们有权访问的字段(读/写),您可以执行类似以下的操作。

首先是一个表示可读/可写事物的接口(interface):

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;
    }
});

等等。

关于java - 让匿名监听器使用字段变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47021939/

相关文章:

java - 反序列化GSON中的递归多态类

Java:notify() 与 notifyAll() 重来一遍

java - 使用枚举中实现 "Listeners"的类

java - 将 Eclipse 安装移动到用户配置文件之外的文件夹?

java - Spring Redis 问题 : GetAllCacheNames from redis cache is not working with RedisCacheManager

Android 自定义 LinearLayout 和膨胀 xml

java - 如何在回收站 View 的单选组中显示多个选项

android - 将 list_content 包含到列表布局中以保留 ListFragment 功能

android - 第一次更新后停止监听

javascript - addListener 在 node.js 中做了什么?