2017-03-01 4 views
1

내 안드로이드 응용 프로그램에 대한 내 나무 딸기 파이의 온도를 읽고 싶습니다. 서버에서 변수는 double로 리턴됩니다. XML에서 문자열로 반환됩니다. 따라서 String 또는 double 인 경우 값을 설정할 수있는 제네릭 setter를 만들지 않는 이유가 생겼습니다.데이터 바인딩 라이브러리에서 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 만 두 번하고 빠른 문자열 변환을 사용할 수 있습니다 : XML에서

public double getCPUTemperature(){ 
    return this.mCPUTemp; 
} 

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

다음을 : 내 응용 프로그램 인 경우

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

, 나는 @string/tempFormat 옵션을 선택할 것 그래서 더블의 포맷을 쉽게 바꿀 수 있습니다. 코드에서 하드 코딩 된 서식을 사용하지 않는 편이 더 좋으며 XML이 더 좋은 곳입니다.

+0

이것은 내가 찾고있는 대답입니다. ViewModel 대신보기에서 코드의 서식을 지정하는 것에 대한 의문이있었습니다. 그러나 이것을 본 후에 나는 코드가 더 적어지고 유지 보수가 더 쉬워 져야하기 때문에 더 나은 곳이라고 생각하는 경향이 있습니다. – user3473161