2016-11-09 88 views
5

我想用Android Data Binding做一個簡單的測試示例。我只想在我的片段中顯示名爲"title"EditText中的文字"test",但未顯示此文字。這裏是我的代碼:Android數據綁定不起作用

TestVM.java

public class TestVM extends BaseObservable { 

    public TestVM() {} 

    @Bindable 
    public String getText() { 
     return "test"; 
    } 
} 

fr_login.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"> 

<data> 
    <variable 
     name="test" 
     type="de.theappguys.templateandroid.viewmodel.TestVM"/> 
</data> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/transparent" 
    > 

<TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_marginTop="20dp" 
      android:text="@{test.text}" 
      android:textSize="22sp" 
      android:textStyle="bold" 
      android:textColor="@android:color/black" 
      /> 

</RelativeLayout> 
</layout> 

FrLogin.java

@EFragment 
public class FrLogin extends Fragment { 

... 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    FrLoginBinding binding = DataBindingUtil.inflate(inflater, R.layout.fr_login, container, false); 

    return binding.getRoot(); 
} 

... 

的build.gradle

android { 

..... 

    dataBinding { 
     enabled = true 
    } 

.... 
} 

回答

4

你需要與你的代碼是有你的模型和Fragment之間沒有連接到值設置爲你的綁定

FrLoginBinding binding = DataBindingUtil.inflate(inflater, R.layout.fr_login, container, false); 
binding.setTest(new TestVM()); 

問題。

+1

是的,你是完全正確的,謝謝! – IrApp

+0

最受歡迎:) –

4

你必須綁定你ViewModel爲好。 E.g

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    FrLoginBinding binding = DataBindingUtil.inflate(inflater, R.layout.fr_login, container, false); 
    binding.setTest(new TestVM()); 
    return binding.getRoot(); 
} 
+0

酷!真的很好,它像一個魅力工作,非常感謝:) – IrApp

+0

不客氣 – Blackbelt