我有一个自定义绑定的MvxSpinner,它适用于我的Android和iOS应用程序之间共享的ViewModel。在Android API Level 15(4.0.3)及更高版本上,一切看起来都很棒,但在Android API Level 14(4.0)上,微调器会为每个ListItem元素显示空白文本。 ListItems在那里,但Text只是空白。当我在Android 4.0上进行选择时,将正确的值传递回所选项目的ViewModel,我的应用程序会相应更新。
Android 4.0上是否存在MxvSpinner的已知错误?
这是我的MvxSpinner的XML:
<MvxSpinner
style="@style/spinner_input"
local:MvxItemTemplate="@layout/item_spinner"
local:MvxDropDownItemTemplate="@layout/item_spinnerdropdown"
local:MvxBind="ItemsSource ProductCategoryOptions; SelectedItem SelectedProductCategory" />
这是我的模板:
item_spinner
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black"
android:text="Test"
local:MvxBind="Text Caption" />
Item_SpinnerDropDown
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
local:MvxBind="Text Caption" />
答案 0 :(得分:5)
由于此问题尚未标记为已回答且我不知道答案是否已经找到,我会发布我的解决方案以供将来读者参考。
将以下代码放在名为LinkerPleaseInclude.cs
的文件中:
public void Include(CheckedTextView checkedText)
{
checkedText.TextChanged += (sender, args) => checkedText.Text = string.Empty + checkedText.Text;
checkedText.Hint = string.Empty + checkedText.Hint;
}
这是链接器包含CheckTextView
绑定所必需的。这适用于Android API 16 v4.1.x,在VS2013中启用了“仅限Sdk Assemblies”链接。
答案 1 :(得分:0)
Android 4.0上是否存在MvvmCross和自定义绑定的已知错误?
我不知道 - 但不可否认我在4.0上测试不多 - 我目前的模拟器包括2.3.6,4.0.3,4.1和4.4.2
(我也不确定你为什么称之为“自定义绑定” - 我假设这只是使用标准的MvxBinding而不是任何添加/自定义)
有很多错误/问题Mvx目前正在跟踪{4}} MvxSpinner
激活以及Android 4+和4.4中的通胀变化 - 但这些都不属于“隐形”区域 - 请参阅:
我担心这不是你问题的答案。可能值得尝试在Android v4.0配置中使用不同的颜色和布局,并且可能使用hierarchyviewer来检查显示的UI。在这里查看问题有很多关于4.0中的微调器可见性的评论(但我看不到任何立即有用的东西) - https://stackoverflow.com/search?q=spinner+4.0
答案 2 :(得分:0)
这似乎是本地问题:MvxBind =“Text Caption”属性未在CheckedTextView对象上正确更新。
我将Item_SpinnerDropDown.xml更改为以下(“CheckedTextView”改为“TextView”),现在一切正常:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto/WIRECOWEBMOB.Droid"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black"
local:MvxBind="Text Caption" />
这不是下拉列表的首选功能(缺少Checked可见性),但它现在适用于所有版本。
另一个注意事项:我发现这是发布版本的问题,而不是特定的Android版本。我在调试模式下使用所有SDK版本,并且它们在我的模拟器中运行良好,但是一旦我切换到Release,空白下拉项目就出现了。
答案 3 :(得分:0)
不确定是否相关,但它帮助了我。
我绑定到我的MvxSpinner中的整数列表,当我尝试使用
时local:MvxBind="Text Caption"
在item_spinner.axml和item_spinnerdropdown.axml
中结果是空格而不是我的值。我认为它发生是因为int没有Caption属性,所以我试图改变绑定,因此它绑定到对象本身,而不是它的属性。它也是如此:
local:MvxBind="Text ."
左右:
local:MvxBind="Text"
有一个关于差异的话题: Are "{Binding Path=.}" and "{Binding}" really equal
因此,将模板代码更改为:
可能会有所帮助<强> item_spinner:强>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black"
android:text="Test"
local:MvxBind="Text ." />
<强> Item_SpinnerDropDown:强>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
local:MvxBind="Text ." />