Does someone know how to use the Xamarin Component Jazzy ViewPager with MvxFragments?
Normally I use the FragmentStatePagerAdapter like this:
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 gives an example how to use:
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);
}
}
I tried to combine these two Adapters but didn't get it to work.
First try:
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;
}
Problem is that fragment.View
is Null
Second try:
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;
}
This produces no execptions but also no visible content.
Is it even possible to work with fragments for this control? Thx in advance for any help.