这是我想解决的 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/