数据绑定未在Android

要实现数据绑定。我实现了代码,数据来自API,但未与xml绑定且未显示任何错误。所以我很困惑问题出在哪里..请帮助我。

我的代码

content_policy_info.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="policyinfo"
            type="com.exlservice.lifeprov1.service.model.GetPolicyInfoResponse" />

        <variable
            name="surrenderquote"
            type="com.exlservice.lifeprov1.service.model.SurrenderQuoteResponse" />
    </data>
<android.support.constraint.ConstraintLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:id="@+id/c1"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".view.ui.PolicyInfo"
    tools:showIn="@layout/app_bar_policy_info">
    <android.support.v4.widget.nestedScrollView
        android:layout_width="match_parent"
        android:background="#223d50"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <LinearLayout android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:background="@drawable/policy_prime_info_bg"
                android:layout_marginTop="20dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                >
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="8dp"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="0dp"
                        android:layout_marginLeft="5dp"
                        android:layout_height="wrap_content"
                        android:text="@{policyInfo.ProductId}"
                        android:textColor="#76c6db"
                        android:layout_weight="1"
                        android:typeface="serif"
                        android:textStyle="bold"
                        android:id="@+id/id_fc_first_key"/>
                    <TextView
                        android:layout_width="0dp"
                        android:textColor="#76c6db"
                        android:textStyle="bold"
                        android:typeface="serif"
                        android:layout_height="wrap_content"
                        android:text="@{policyInfo.Contract}"
                        android:layout_weight="1"
                        android:id="@+id/id_fc_second_key"/>

                </LinearLayout>
           </LinearLayout>
    </android.support.v4.widget.nestedScrollView>
</android.support.constraint.ConstraintLayout>
</layout>

Policyinfo.java

public class PolicyInfo extends AppCompatactivity
    implements NavigationView.OnNavigationItemSelectedListener {
APIInterface apiInterface;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding= DataBindingUtil.setContentView(this,R.layout.activity_policy_info);
    Intent intent = getIntent();
    String sCompanyCode = intent.getStringExtra("CompanyCode");
    String sPolicyNumber = intent.getStringExtra("PolicyNumber");
    String sWayPoint = intent.getStringExtra("WayPoint");
    Log.e("onCreate: ",sCompanyCode+"   "+sPolicyNumber );
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String currentTime = sdf.format(new Date());
    SurrenderQuoteInput surrenderQuoteInput = new SurrenderQuoteInput();
    surrenderQuoteInput.setCoderID("TRN7");
    surrenderQuoteInput.setCompanyCode("01");   
    PolicyDetailsReq policyDetailsReq= new PolicyDetailsReq();
    policyDetailsReq.setCoderID("TRN7");

    getPolicyInfoRequest.setPolicyDetailsReq(policyDetailsReq);

    PolicyInfoViewModel.Factory factory = new PolicyInfoViewModel.Factory(
            **getapplication(),getPolicyInfoRequest,surrenderQuoteRequest);
    PolicyInfoViewModel viewModel =
            ViewModelProviders.of(this,factory).get(PolicyInfoViewModel.class);
    **observeViewModel**(viewModel);**

    // show it
    pd.show();
    DrawerLayout drawer =  findViewById(R.id.drawer_layout);
    actionbardrawertoggle toggle = new actionbardrawertoggle(
            this,drawer,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView =  findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

}
private void **observeViewModel**(final PolicyInfoViewModel viewModel) {
    // Update the list when the data changes
    viewModel.getPolicyInfoResponsetObservable().observe(this,new Observer<GetPolicyInfoResponse>() 
{
        @Override
        public void onChanged(@Nullable GetPolicyInfoResponse getPolicyInfoResponse) {
            if(getPolicyInfoResponse!=null) {
                viewModel.setPolicyInfoResult(getPolicyInfoResponse);
                binding.setPolicyinfo(getPolicyInfoResponse);
            }

        }

    });
}

此代码用于导航抽屉活动,其中所有组件都位于content_policy_info.xml中。请帮帮我。

gzblue_zhuzh 回答:数据绑定未在Android

数据绑定是非常有用的工具,如果正确完成,可以节省很多工作时间。 我真的建议您先阅读this guide,然后再尝试自己实施一些功能。 这里我只是强调数据绑定设置中的主要步骤

  1. 确保在您的应用中启用数据绑定:在应用gradle中添加

    dataBinding { enabled = true }

  2. 为您的xml文件创建特定的绑定:

    ContentPolicyInfoBinding binding = DataBindingUtil.setContentView(this,R.layout.content_policy_info);

(也许您是在其中通过夸大activity_policy_info而犯了一个错误?

  1. 将绑定参数设置为ObservablFields一次(如果这些参数应随时间变化)

    ObservablField<GetPolicyInfoResponse> policyInfoField = new ObservablField(); ... binding.policyinfo = policyInfoField;

  2. 更改xml以匹配:

    <import type="com.exlservice.lifeprov1.service.model.GetPolicyInfoResponse"/> <variable name="policyinfo" type="android.databinding.ObservableField&lt;GetPolicyInfoResponse&gt;"/>

  3. 当新的policyInfo到达时更新policyInfoField

    policyInfoField.set(getPolicyInfoResponse)


但更可取的是使用视图模型,将其字段设置为可绑定的。这样就可以仅通过更改模型的字段来更新视图。

本文链接:https://www.f2er.com/3153113.html

大家都在问