有人知道如何将Xamarin组件Jazzy ViewPager与MvxFragments一起使用吗?
通常我会像这样使用FragmentStatePagerAdapter:
public ObservableCollection<TModel> ItemsSource
{
get { return _itemsSource; }
set
{
if(_itemsSource==value)
return;
if (_itemsSource != null)
{
_itemsSource.CollectionChanged -= ItemsSourceChanged;
}
_itemsSource = value;
value.CollectionChanged += ItemsSourceChanged;
NotifyDataSetChanged();
}
}
public override Fragment GetItem(int position)
{
var element = ItemsSource.ElementAt(position);
var viewType = ViewsContainer.GetViewType(element.GetType());
var fragment = (MvxFragment)Activator.CreateInstance(viewType);
fragment.DataContext = element;
return fragment;
}
Xamarin举例说明如何使用:
private class MyJazzyAdapter : JazzyPagerAdapter
{
public MainAdapter(JazzyViewPager jazzy)
: base(jazzy)
{
}
public override Java.Lang.Object InstantiateItem(
ViewGroup container, int position)
{
// create and add the view
var view = ...
container.AddView(
view,
ViewGroup.LayoutParams.MatchParent,
ViewGroup.LayoutParams.MatchParent);
// let the jazzy bit know about the object
SetObjectForPosition(view, position);
// continue as normal
return view;
}
public override void DestroyItem(
ViewGroup container, int position, Java.Lang.Object obj)
{
// get the real view from the jazzy bit
var view = FindViewFromObject(position);
// continue as normal
container.RemoveView(view);
}
}
我尝试将这两个适配器结合起来,但没有让它发挥作用。
首先尝试:
public override Object InstantiateItem(ViewGroup container, int position)
{
var element = ItemsSource.ElementAt(position);
var viewType = ViewsContainer.GetViewType(element.GetType());
var fragment = (MvxFragment)Activator.CreateInstance(viewType);
fragment.DataContext = element;
container.AddView(fragment.View, ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);
SetObjectForPosition(fragment.View, position);
return fragment.View;
}
问题是fragment.View
是空的
第二次尝试:
public override Object InstantiateItem(ViewGroup container, int position)
{
var element = ItemsSource.ElementAt(position);
var viewType = ViewsContainer.GetViewType(element.GetType());
var fragment = (MvxFragment)Activator.CreateInstance(viewType);
fragment.DataContext = element;
// container.AddView(fragment.View, ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);
SetObjectForPosition(fragment, position);
return fragment;
}
这不会产生任何行为,但也没有可见的内容。
是否可以使用片段进行此控制? 请提前获取任何帮助。