绑定不会更新 TabLayout 自定义标题视图
Binding won't update TabLayout custom title view
在 MvvmCross 4.x 中,我创建了一个 Android TabLayout
,自定义 Views
作为 title/header。
自定义 Views
绑定到一些文本和数字(显示为徽章)。
一切正常。但是,当更新(增加)徽章的数量时,选项卡 header 视图将不会跟随。
我需要为 header 创建一个自定义绑定,但我想我在这里做错了。
我在创建选项卡 Fragment
和 ViewModel
后使用以下代码:
var bindingContext = new MvxAndroidBindingContext(Context, (IMvxLayoutInflaterHolder)Context,
FragmentStatePagerAdapter.TryGetTabViewModel(tabIndex));
var view = bindingContext.BindingInflate(tabTitleResourceId, null);
var tab = TabLayout.GetTabAt(tabIndex);
tab.SetCustomView(view);
然后视图(选项卡 headers)刷新一次,然后就不再刷新了。
知道为什么视图没有更新吗?
如果重要的话,我使用 MvxFragment
(来自支持库)和 MvxCachingFragmentStatePagerAdapter
。
解决方案是让 MvxAndroidBindingContext 在某处保持活动状态。
因此,以下不是很好的代码应该可以工作。
var bindingContext = new MvxAndroidBindingContext(Context(IMvxLayoutInflaterHolder)Context,
FragmentStatePagerAdapter.TryGetTabViewModel(tabIndex));
tabCachedBindingsList.Add(bindingContext);
var view = bindingContext.BindingInflate(tabTitleResourceId, null);
var tab = TabLayout.GetTabAt(tabIndex);
tab.SetCustomView(view);
在 MvvmCross 4.x 中,我创建了一个 Android TabLayout
,自定义 Views
作为 title/header。
自定义 Views
绑定到一些文本和数字(显示为徽章)。
一切正常。但是,当更新(增加)徽章的数量时,选项卡 header 视图将不会跟随。 我需要为 header 创建一个自定义绑定,但我想我在这里做错了。
我在创建选项卡 Fragment
和 ViewModel
后使用以下代码:
var bindingContext = new MvxAndroidBindingContext(Context, (IMvxLayoutInflaterHolder)Context,
FragmentStatePagerAdapter.TryGetTabViewModel(tabIndex));
var view = bindingContext.BindingInflate(tabTitleResourceId, null);
var tab = TabLayout.GetTabAt(tabIndex);
tab.SetCustomView(view);
然后视图(选项卡 headers)刷新一次,然后就不再刷新了。
知道为什么视图没有更新吗?
如果重要的话,我使用 MvxFragment
(来自支持库)和 MvxCachingFragmentStatePagerAdapter
。
解决方案是让 MvxAndroidBindingContext 在某处保持活动状态。
因此,以下不是很好的代码应该可以工作。
var bindingContext = new MvxAndroidBindingContext(Context(IMvxLayoutInflaterHolder)Context,
FragmentStatePagerAdapter.TryGetTabViewModel(tabIndex));
tabCachedBindingsList.Add(bindingContext);
var view = bindingContext.BindingInflate(tabTitleResourceId, null);
var tab = TabLayout.GetTabAt(tabIndex);
tab.SetCustomView(view);