如何在Android中绑定一个可以用数据结合折叠的弦或双重绑定的变量



对于我的Android应用,我想阅读Raspberry Pi的温度。从服务器中,变量作为双重返回。从XML中,它作为字符串返回。因此,我想为什么我不制作一个通用的设置器,如果它是字符串或double,则可以设置该值。

@Bindable
public String getCPUTemperature(){
    return Double.toString(mCPUTemp);
}
/**
 * Sets the CPU temperature for the device view model.
 * @param <T> The generic parameter T accepts a String as wel as a Double to set the available memory.
 */
public <T> void setCPUTemperature(T CPUTemp){
    if(CPUTemp.getClass().equals(String.class))
        this.mCPUTemp = Double.parseDouble((String)CPUTemp);
    else if(CPUTemp.getClass().equals(Double.class))
        this.mCPUTemp = (double)CPUTemp;
    notifyPropertyChanged(BR.cPUTemperature);
}

,但是在我创建此设置器后,我发现了:

注意:数组和通用类型(例如可观察类)可能会在没有错误时显示错误。

所以我开始怀疑。是否可以使用通用变量求解它,如果是的,那是解决该问题的最佳方法吗?

这听起来像是该注释与Android Studio支持数据绑定有关。Android Studio对数据绑定的支持仍在改善。当代码编译并运行正常时,有时会显示警告或红色强调。

您正在做的事情将有效。您当前的方法根本不使用T,因此可能是Object。我认为您不会从使用仿制药中获得任何真正的优势。

您无需仿制药就可以做到这一点,我认为它看起来更好:

public void setCPUTemperature(String CPUTemp){
    this.mCPUTemp = Double.parseDouble((String)CPUTemp);
    notifyPropertyChanged(BR.cPUTemperature);
}
public void setCPUTemperature(double CPUTemp){
    this.mCPUTemp = CPUTemp;
    notifyPropertyChanged(BR.cPUTemperature);
}

还有其他选择。例如,您只能在XML中使用double,然后在XML中进行快速的字符串转换:

public double getCPUTemperature(){
    return this.mCPUTemp;
}
public void setCPUTemperature(double CPUTemp){
    this.mCPUTemp = CPUTemp;
    notifyPropertyChanged(BR.cPUTemperature);
}

,然后在xml中:

<TextView android:text='@{"" + model.cPUTemperature}' .../>
<TextView android:text="@{Double.toString(model.cPUTemperature)}" .../>
<TextView android:text="@{@string/tempFormat(model.cPUTemperature)}" .../>

如果是我的应用程序,我会选择@string/tempFormat选项,以便可以轻松地更改双重的格式。我更喜欢避免在代码中进行硬编码格式,而XML是一个更好的地方。

最新更新