gpt4 book ai didi

Android:如何制作我自己的 EventListener?

转载 作者:行者123 更新时间:2023-11-29 18:09:54 25 4
gpt4 key购买 nike

今天有人告诉我,我们可以在我们的 Android 项目中引入 MVC(或准 MVC)架构。我有一些类包含主要由用户输入的信息,我希望我的 View (假设它是 TextView,为了讨论)显示它。我最初的想法是,每次我更新包含数据的类时,我都会调用一个方法将其反射(reflect)在我的 TextView 上。

Data d = new Data();
TextView t = (TextView) findViewById(R.id.IamTextView);

// ....

d.setS("Foo"); // <--- Data updated!
t.setText(d.getS()); // <--- View updated, too!

这无疑是蹩脚的,尽管只要更新数据的情况非常有限并且我们知道它们都在哪里就可以了,但我想尝试一些更酷、更聪明的东西。所以我正在定义一个自定义的 EventListener...

public class Data {
protected int i;
protected double d;
protected String s;
//Setter & Getter omitted!
}

public interface Data.onUpdatedListener {
public void onUpdated (Data d);
}

public class TestActivitiy extends Activity implements Data.onUpdatedListener {

Date[] d;

//onCreate() omitted!

@Override public void onUpdated (Data d) {
// I want to reflect this change on my Views, like below.
TextView t = (TextView) findViewById(R.id.IamTextView);
t.setText(d.getS());
}
}

我知道我必须创建一个专门的类来充当 Controller ,其作用是通知 Activity 发生更新以及它是哪个对象(如果我在 Data 作为 onUpdated() 的参数,这样我只能将“差异”发送到 Activity,而不是作为一个整体的对象)。

我的第 01 期:我不确定如何通知我的更新 Activity (换句话说,如何触发 onUpdated() 方法)。

我的第 02 期:我不确定如何确定对象是否已更新。如果任何成员不同,我想通知它,但如何通知?我们是否应该始终保留对象的最新状态,并将其所有成员变量与当前变量的成员变量进行比较?

最佳答案

在您要更新Data 的类中,定义监听器并为监听器提供setter 方法。

class Data {
A a;
B b;
C c;

//...constructor, setter, getter, etc
}

class A {
Listener listener;

interface Listener {
void onUpdate(Data data);
// another abstract method accepting A, B and C as parameters,
// just an example and can be omitted if onUpdate(Data) is sufficient
void onUpdate(A a, B b, C c);
}

public void setListener(Listener listener) {
this.listener = listener;
}

public void update(Data data) { // the method that is to update the Data
if (listener != null) {
listener.onUpdate(data);
listener.onUpdate(data.a, data.b, data.c);
}
}

public void update(A a, B b, C c) { // another method to update the Data
if (listener != null) {
// Assume you have this constructor for Data,
// just for the ease of understanding.
listener.onUpdate(new Data(a, b, c));
listener.onUpdate(a, b, c);
}
}
}

class B implements A.listener {
// In somewhere
setListner(this);

@Override
void onUpdate(Data data) {
// your implementation
}

@Override
void onUpdate(A a, B b, C c) {
// your implementation
}
}

已编辑在监听器中增加了另一个回调方法,用于演示监听器的用法。

关于Android:如何制作我自己的 EventListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11304008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com