Java 检测Android中特定变量的值何时更改
我有一个名为Java 检测Android中特定变量的值何时更改,java,android,Java,Android,我有一个名为mCurrentIndex的int变量。当它的值改变时,我想做一些事情 例如: public class MainActivity extends Activity{ private int mCurrentIndex = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setConte
mCurrentIndex
的int
变量。当它的值改变时,我想做一些事情
例如:
public class MainActivity extends Activity{
private int mCurrentIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Apps logic.
}
public onCurrentIndexValueChange(){
button.setClickable(true);
}
}
如果mCurrentIndex上的作用域仅在MainActivity中,那么我认为最好只为mCurrentIndex创建getter和setter方法,并在setter方法调用onCurrentIndexValueChange()的末尾
如果mCurrentIndex上的作用域仅在MainActivity中,那么我认为最好只为mCurrentIndex创建getter和setter方法,并在setter方法调用onCurrentIndexValueChange()的末尾
您可以使用setter函数
private int mCurrentIndex = 1;
public void setCurrentIndex(int newValueFormCurrentIndex)
{
if(newValueFormCurrentIndex != mCurrentIndex)
{
onCurrentIndexValueChange();
mCurrentIndex = newValueFormCurrentIndex;
}
}
您可以使用setter函数
private int mCurrentIndex = 1;
public void setCurrentIndex(int newValueFormCurrentIndex)
{
if(newValueFormCurrentIndex != mCurrentIndex)
{
onCurrentIndexValueChange();
mCurrentIndex = newValueFormCurrentIndex;
}
}
解决这一问题的一种方法是使用 在您的情况下,由于您希望观察
int
,因此可以执行以下操作:
public MutableLiveData<Integer> mCurrentIndex = new MutableLiveData<>();
要观察这些变化,您需要:
mCurrentIndex.observe(这个,新的观察者(){
@凌驾
公共void onChanged(@Nullable final Integer newIntValue){
//更新UI,在本例中为TextView。
mNameTextView.setText(“我的当前新索引是:”+newIntValue);
}
};);
}
这种方法很有用,因为您可以定义一个ViewModel来将逻辑与活动分离,同时让UI观察并反映发生的更改
通过将逻辑与ViewModel分离,您的逻辑变得更容易测试,因为为ViewModel编写测试相对来说比为活动编写测试更容易
有关LiveData的更多信息,请查看此项。解决此问题的一种方法是使用 在您的情况下,由于您希望观察
int
,因此可以执行以下操作:
public MutableLiveData<Integer> mCurrentIndex = new MutableLiveData<>();
要观察这些变化,您需要:
mCurrentIndex.observe(这个,新的观察者(){
@凌驾
公共void onChanged(@Nullable final Integer newIntValue){
//更新UI,在本例中为TextView。
mNameTextView.setText(“我的当前新索引是:”+newIntValue);
}
};);
}
这种方法很有用,因为您可以定义一个ViewModel来将逻辑与活动分离,同时让UI观察并反映发生的更改
通过将逻辑与ViewModel分离,您的逻辑变得更容易测试,因为为ViewModel编写测试相对来说比为活动编写测试更容易
有关LiveData的更多信息,请查看此项。可能重复的android.databinding.ObserveInt是其他人注意到的观察者模式的实现。可能重复的android.databinding.ObserveInt是其他人注意到的观察者模式的实现注意。非常感谢您分享您的答案。它就像一个魅力,但我们可以通过建立一个倾听者来达到同样的效果吗?侦听器比使用setter更好吗?为什么要检查这个?这不是一个听众!非常感谢你分享你的答案,它很有魅力,但是我们能通过建立一个倾听者来达到同样的效果吗?侦听器比使用setter更好吗?为什么要检查这个?这不是一个听众!谢谢你分享这些信息,我有一个问题要问,它和听众有什么不同?这种方法也适用于MVC设计模式吗?从技术上讲,您可以在应用程序中的任何位置使用LiveData,因此您不必将其与MVVM一起使用。但是,将它与Android的ViewModel类一起使用也有好处。请看我链接的LiveData文档和“使用LiveData的优势”部分。感谢您分享这些信息,我有一个问题,它与侦听器有何不同?这种方法也适用于MVC设计模式吗?从技术上讲,您可以在应用程序中的任何位置使用LiveData,因此您不必将其与MVVM一起使用。但是,将它与Android的ViewModel类一起使用也有好处。看看我链接的LiveData文档,看看“使用LiveData的优势”一节。
mCurrentIndex.observe(this, new Observer<Integer>() {
@Override
public void onChanged(@Nullable final Integer newIntValue) {
// Update the UI, in this case, a TextView.
mNameTextView.setText("My new current index is: " + newIntValue);
}
};);
}