Jazzy ViewPager与MVVMCROSS

时间:2015-11-20 11:15:09

标签: android xamarin android-viewpager mvvmcross fragmentstatepageradapter

有人知道如何将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;
        }

这不会产生任何行为,但也没有可见的内容。

是否可以使用片段进行此控制? 请提前获取任何帮助。

0 个答案:

没有答案