Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检测Android中特定变量的值何时更改_Java_Android - Fatal编程技术网

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