Android上的MvvmCross,MvxListViewItem存在奇怪的问题

时间:2014-06-22 20:44:29

标签: android mvvmcross

在Android上使用MvvmCross遇到了一个问题。

我有一个MvxListView,它是使用自定义适配器派生的,因此我可以为各种类型的项目显示不同的视图。这很好。

我看到的问题是偶尔会出现以下问题。 MvxListViewItem是在屏幕上创建并显示的,但没有任何绑定发生(我正在使用所有示例中显示的DelayBind,但未调用Action)。如果我然后在屏幕外滚动此项目并再次返回,则DelayBind操作将与绑定一起执行并填充项目?

很奇怪,一直给我带来麻烦。

有没有其他人遇到这个问题并将其解决?

class BaseCustomListItemView: MvxListItemView
        {
            public BaseCustomListItemView(Context context, IMvxLayoutInflater layoutInflater, object dataContext, int templateId)
                : base(context, layoutInflater, dataContext, templateId)
            {

                this.DelayBind( () => 
                {
                    this.CreateBinding(this).For( "ProfileImage" ).To<ActivityItemVM>(vm => vm.ActivityUser).Apply();
                } );
            }

            public string ProfileImage
            {
                set 
                { 
                    var nameControl = this.FindViewById<PlayerNameControl>(Resource.Id.name);
                    var imageControl = this.FindViewById<PlayerProfileControl>(Resource.Id.photo);
                    imageControl.SetPlayerId( value, nameControl );

                }
            }

        }

我的自定义适配器如下所示:

class CustomAdapter : MvxAdapter
        {
            public CustomAdapter(Context context)
                : base(context)
            {
            }

            protected override IMvxListItemView CreateBindableView(object dataContext, int templateId)
            {
                if ( dataContext is EventApprovedActivityItemVM )
                    return new EventApprovedActivityListItemView(base.Context, base.BindingContext.LayoutInflater, dataContext, templateId);

                if ( dataContext is AddedPlayerActivityItemVM )
                    return new AddedPlayerListItemView(base.Context, base.BindingContext.LayoutInflater, dataContext, templateId);

                if ( dataContext is AchievementLevelUpActivityItemVM )
                    return new AchievementLevelUpListItemView(base.Context, base.BindingContext.LayoutInflater, dataContext, templateId);

                if ( dataContext is EventCreatedActivityItemVM )
                {
                    var item = new EventCreatedActivityListItemView( base.Context, base.BindingContext.LayoutInflater, dataContext, templateId );
                    //                  item.ImageId = ( (EventCreatedActivityItemVM)dataContext ).ImageID;
                    return item;
                }

                return new BaseCustomListItemView(base.Context, base.BindingContext.LayoutInflater, dataContext, templateId);
            }

            public override int GetItemViewType(int position)
            {
                var item = GetRawItem(position);
                if (item is EventApprovedActivityItemVM)
                    return 0;
                if (item is AddedPlayerActivityItemVM)
                    return 1;
                if (item is AchievementLevelUpActivityItemVM)
                    return 2;
                if (item is EventCreatedActivityItemVM)
                    return 3;

                return 0;
            }

            public override int ViewTypeCount
            {
                get { return 4; }
            }

            protected override View GetBindableView(View convertView, object dataContext, int templateId)
            {
                if (dataContext is EventApprovedActivityItemVM)
                    templateId = Resource.Layout.eventapprovedactivityitem;

                if (dataContext is AddedPlayerActivityItemVM)
                    templateId = Resource.Layout.addedplayeractivityitem;

                if (dataContext is AchievementLevelUpActivityItemVM)
                    templateId = Resource.Layout.achievementlevelupactivityitem;

                if (dataContext is EventCreatedActivityItemVM)
                    templateId = Resource.Layout.eventcreatedactivityitem;

                return base.GetBindableView(convertView, dataContext, templateId);
            }

        }

由于 安迪

0 个答案:

没有答案