仅限Android 4.0上的MvxSpinner Blank

时间:2014-01-17 21:49:23

标签: android xamarin.android xamarin mvvmcross

我有一个自定义绑定的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" />

4 个答案:

答案 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 ." />