2017-03-01 3 views
1

私のアンドロイドアプリケーションでは、ラズベリーパイの温度を読みたいと思います。サーバーから、変数はdouble型として返されます。 XMLから、文字列として返されます。したがって、私はStringまたはdoubleの場合、値を設定できるジェネリックセッターを作成しないのはなぜだろうと思っていました。データバインディングライブラリを使用してStringまたはDoubleにすることができる、androidの変数をバインドする方法はありますか?

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

しかし、私は、私がいることが分かった。このセッターを作成した後:

注:エラーがないとき、このような観察可能なクラスとして配列やジェネリック型は、エラーが表示される場合がありますが。

私は不思議に思っていました。それは一般的な変数でそれを解決することは可能ですか?もしそうなら、それを解決する最良の方法でしょうか?

答えて

2

コメントは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での迅速な文字列変換だけダブルとを使用することができます。

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がより良い場所です。

+0

これは私が探していた答えです。 ViewModelの代わりにViewでコードの書式を設定することに疑問がありました。しかし、これを見た後、私はそれがより良い場所だと思う傾向があります。なぜなら、コードが少なくなり、保守が容易になるからです。 – user3473161

関連する問題