簡體   English   中英

Android 數據綁定不起作用

[英]Android data binding not working

我正在嘗試使用Android Data Binding做一個簡單的測試示例。 我只想在我的片段中顯示名為"title"EditText中的文本"test" ,但未顯示該文本。 這是我的代碼:

測試虛擬機.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>

神父登錄.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();
}

...

構建.gradle

android {

.....

   dataBinding {
       enabled = true
   }

....
}

你需要為綁定設置值

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

代碼問題在於您的模型與Fragment之間沒有任何關聯。

你也必須綁定你的ViewModel 例如

@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();
}
     private Context mContent;

     @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {

        FragmentBrandBinding binding = FragmentBrandBinding.inflate(inflater, container, false);
        View view = binding.getRoot();
        mContent = view.getContext();
        return view;
      }

你應該在 build.gradle(:app) 中添加這一行

“ buildFeatures { viewBinding true } ”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM