Android数据绑定无法正确更新视图

时间:2019-07-30 14:02:47

标签: android kotlin viewmodel android-databinding

我正在尝试在用户从对话框中选择的登录片段中显示国家代码和标志,该对话框包括国家列表和用于搜索的文本视图。对于国家和搜索,我使用了recyclerview和android pagedlist库。我在ViewModel中使用observablefield进行数据和XML中的数据绑定。问题是当您搜索国家/地区时。例如,如果国家/地区代码是两位数,然后用具有三位数字的国家/地区更改国家,则文本视图仅显示两位数的国家/地区代码。它仅在您使用搜索时发生 这可能是因为textview宽度(即包装内容)没有更新。我不知道为什么!!!

这是阿富汗的图片,带有2位数字的代码,可以正常工作 this is the picture

但是在那之后,我将国家/地区更改为具有三位数代码(+376)的安道尔,并且只显示前两位数字(+37) this is the picture

我尝试使用实时数据而不是可观察字段,但这没有帮助。 我还尝试了在没有数据绑定的情况下更改国家(地区)代码,但这并不能解决问题。 当我在调试器中查看数据时,数据更新就很好了,但它并没有在textview中显示所有数字。 如果您不使用搜索,它就可以正常工作。

这是卡片视图中的国旗和国家/地区代码xml的代码

<TextView
    android:id="@+id/countryCode"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    android:text="@{ viewModel.mobileCode }"
    android:textColor="@color/colorBlack"
    android:textSize="15sp"
    tools:text="+1" />

<ImageView
    android:id="@+id/countryFlag"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_marginStart="16dp"
    android:contentDescription="@string/country"
    android:scaleType="centerInside"
    android:visibility='@{ viewModel.mobileCode == "" ? View.GONE : View.VISIBLE }'
    app:error="@{ @drawable/ic_placeholder_flag }"
    app:imageCornerRadius="@{ 8 }"
    app:imageUrl="@{ viewModel.flagUrl }"
    app:placeholder="@{ @drawable/ic_placeholder_flag }"
    tools:srcCompat="@drawable/ic_placeholder_flag" />

这是登录片段中的代码,用于更新CountiyDialog中的数据。 CountryDialog中的showDialog方法采用lambda

binding.countryFlag.setOnClickListener {
    CountryDialogFragment.showDialog(fragmentManager!!, true) { country ->
        viewModel.mobileCode.set(country.phoneCode)
        viewModel.flagUrl.set(country.imageUrl)
    }
}

0 个答案:

没有答案