In Android, how do I take an action whenever a variable changes?
所以我想为我创建的对象实现一个监听器。我想要它做的是当它的值从false变为true时执行一段代码。
当我关注这个主题时,我无法理解这个人希望我们在哪里实现包含监听器逻辑的最后一段代码。
希望有人能指导我朝着正确的方向前进吗?
(这个问题在这里被问到,因为我没有足够的代表点数)
答案 0 :(得分:1)
最后一段示例代码触发了侦听器,因此每当“事件”发生时基本上都需要运行它。在这种情况下,“事件”随时(代码中的任何位置)变量的值发生变化。
如果您有一个setter,这是值变化的唯一位置,那就是您放置它的位置。如果要在整个代码中的多个位置更改值,我会创建一个新的私有方法(称之为signalChanged
),将代码放在那里,然后在您想要的情况下在变量赋值后立即调用它听众开火。
这是一个例子(从链接的答案借来的一些代码,没有检查它是否编译)。
public class MyObj
{
public MyObj(int value)
{
setValue(value);
}
private int myValue;
public int getValue() { return myValue; }
public void setValue( int value )
{
if (value != myValue)
{
myValue = value;
signalChanged();
}
}
public interface VariableChangeListener
{
public void onVariableChanged(Object... variableThatHasChanged);
}
private VariableChangeListener variableChangeListener;
public void setVariableChangeListener(VariableChangeListener variableChangeListener)
{
this.variableChangeListener = variableChangeListener;
}
private void signalChanged()
{
if (variableChangeListener != null)
variableChangeListener.onVariableChanged(myValue);
}
}
答案 1 :(得分:0)
你必须创建一个回调接口 这是一个关于自定义监听器 tutorial
的好消息这是一个示例
public class MyObj {
VariableChanger onVariableChanged ;
public void setOnVariableChanged(VariableChanger onVariableChanged) {
this.onVariableChanged = onVariableChanged;
}
void log(){
boolean changed = false;
onVariableChanged.onVariableChanged();
//this will call it
}
interface VariableChanger{
void onVariableChanged();
}
}
class logic {
MyObj mo = new MyObj();
void main(){
mo.setOnVariableChanged(new MyObj.VariableChanger() {
@Override
public void onVariableChanged() {
//do your action
}
});
}
}
答案 2 :(得分:-2)
在Android中,与任何语言一样,大多数开发人员使用逻辑比较来检查值(if,else,switch,=,!=,>,<等等)或事件(信号)
您想要实施哪种听众?