如何在Java中实现类似React.js的实时值变化?

3

我已经习惯了使用 React.js 六个月,并开始从 Java 的零基础开始为我的 Android 应用程序开发应用。

React.js 中,当布尔值从 false 改变为 true 时,它所做的一切都是:

this.state = {
    checkmarkChecked: false
}
if (this.state.checkmarkChecked) {
    //If the checkmarkChecked is true
    //TODO: show all checks
} else {
    //If the checkmarkChecked is false
    //TODO: hide all checks
}

如果checkmarkChecked被切换为true,则调用true来显示。 现在我刚开始学习Android开发的Java,我尝试了其中一个:
//onCreate
while (true) {
    if (checkmarkChecked) {
        System.out.println("True");
    } else {
        System.out.println("False");
    }
}

实际上,while(true)导致我的应用程序在启动时冻结。


2
两者并不等同。你在比较不同的事物。前者没有while循环。 - Michael
1
你想在布尔值改变其值时执行一些代码吗? - Zain
@Zain 类似这样的东西 - aliamanuba
1个回答

3
您可以使用封装了布尔值的 MutableLiveData,并将活动注册为使用 .observe() 方法观察其。
每当此布尔值更改时,将使用新的布尔值触发 onChanged() 回调函数。
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final MutableLiveData<Boolean> state = new MutableLiveData<>(false);
    
        state.observe(this, new Observer<Boolean>() {
            @Override
            public void onChanged(Boolean newValue) {
                if (newValue) {
                    Toast.makeText(MainActivity.this, "True", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "False", Toast.LENGTH_SHORT).show();
                }
            }
        });
        
        Button myButton = findViewById(..);
        
        myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                state.setValue(!state.getValue());
            }
        });
        
    }
}

这个按钮仅用于切换布尔值以进行测试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接