ListView中MvxSpinner的问题

时间:2014-05-09 20:30:15

标签: android-listview xamarin.android xamarin mvvmcross android-spinner

我遇到一个问题,我有一个包含一组微调器的列表视图。如果我为第一个微调器选择一个选项,然后向下滚动,我会看到一个我甚至没有触摸的微调器与我刚设置的第一个微调器具有相同的值。我假设这是一个问题,Spinner视图被回收并在下面不正确使用。有没有其他人与纺纱厂遇到这个问题?我想我们需要在MvxAdapter中实现类似于this的解决方案?

1 个答案:

答案 0 :(得分:0)

我实现了自己的MyMvxAdapter和MyMvxListView来处理这个问题。我在MyMvxListView中唯一改变的是让它使用MyMvxAdapter作为其适配器而不是普通的MvxAdapter。然后我将MyMvxAdapter中的GetBindableView更改为:

        protected virtual View GetBindableView(View convertView, object dataContext, int templateId)
        {
            if (templateId == 0)
            {
                // no template seen - so use a standard string view from Android and use ToString()
                return GetSimpleView(convertView, dataContext);
            }

            // we have a templateid so lets use bind and inflate on it :)
            var viewToUse = convertView as IMvxListItemView;
            if (viewToUse != null)
            {
                if (viewToUse.TemplateId != templateId)
                {
                    viewToUse = null;
                }
            }

            if (viewToUse == null)
            {
                viewToUse = CreateBindableView(dataContext, templateId);
            }
            else
            {

                var spinner = (MvxSpinner)convertView.FindViewById(Resource.Id.taskFieldSpinner);
                if (spinner != null)
                {
                    spinner.SetSelection(((WrappedEmployeeTaskField)dataContext).TheField.SpinnerSelection);
                }

                BindBindableView(dataContext, viewToUse);
            }

            return viewToUse as View;
        }

您会注意到唯一真正的区别是,如果viewToUse不为null,我需要直接访问我的微调器资源以正确设置它。然后是#34;魔法酱的最后一个"是在我的数据模型上跟踪微调器的选定值,在这种情况下作为属性" SpinnerSelection"在我的模型上,每次选择值时都会填充。