Android侦听器上的变量值

L·甘格米(L. Gangemi)

我正在开发一种监视器,该监视器应根据我从机器接收到的内容更新许多图像视图(假LED),并让用户知道当前机器状态。有没有一种方法可以在变量上设置值侦听器,当值更改时可以触发方法来更新我的UI?

L·甘格米(L. Gangemi)

感谢大家的帮助和评论;

我发现数据绑定是我的最佳选择,因此,经过几次尝试,我已经能够构建一个示例项目,在该项目中,我有一个处理程序,该处理程序每​​1秒将一个整数值加1。在此之后,我检查如果值是成对或成对,并且我将布尔值设置为true或false。

我设置了一个布局文件,其中有2个文本视图和一个切换按钮。第一个文本视图文本绑定到一个具有我名字的简单字符串,第二个文本视图绑定到以每秒递增的整数(一个计时器),并且“切换按钮”绑定到布尔值。

这是代码:

主要活动

public class MainActivity extends AppCompatActivity {

ActivityMainBinding binding;
android.os.Handler Handler;
User user;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    user = new User("Lorenzo", "Gangemi", 0);
    binding.setUser(user);
    useHandler();
}

public void useHandler() {
    if (Handler != null) {
        Handler.postDelayed(RunableHandler, 1000);
        Handler.removeCallbacks(RunableHandler);
    }
    try {
        Handler = new Handler();
    } catch (Exception e) {
        Handler = new Handler(Looper.getMainLooper());
    }
    Handler.postDelayed(RunableHandler, 1000);
}

private Runnable RunableHandler = new Runnable() {
    @Override
    public void run() {
        user.increment_i();
        binding.setUser(user);
        useHandler();
    }
};
}

用户

public class User {
    private final String firstName;
    private final String lastName;
    private boolean pari;

    private int i;

    public User(String firstName, String lastName, int i) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.i = i;
        setPari(checkPari());
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getI() {
        return i;
    }

    public void increment_i()
    {
        i++;
        setPari(checkPari());
    }

    public boolean checkPari()
    {
        return i%2==0;
    }

    public boolean isPari() {
        return pari;
    }

    public void setPari(boolean pari) {
        this.pari = pari;
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="user" type="mdptech.databinding.User"/>
    </data>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.firstName}"/>
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{Integer.toString(user.i)}" />

        <ToggleButton
            android:text="ToggleButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/toggleButton"
            android:drawableBottom="@drawable/toggle"
            android:background="@android:color/transparent"
            android:textOff="OFF"
            android:textOn="ON"
            android:checked="@{user.pari ? true : false}"/>

    </LinearLayout>
</layout>

一切正常。从代码中可以看到,在处理程序Runnable中,我调用了用于增加计时器的方法,但是我也必须调用binding.setUser(user);以更新布局。

有没有一种方法可以使此更新自动发生,而不是因为我调用了一个方法?

这不是一个大问题,因为我可以创建一个单独的处理程序,该处理程序每​​隔100毫秒(例如)循环一次,并在其可运行的调用中进行循环binding.setUser(user);,但这将大大加快我的工作。谢谢你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章