Android 交换FragmentStatePagerAdapter内的片段列表

Android 交换FragmentStatePagerAdapter内的片段列表,android,android-actionbar,android-viewpager,fragment,xamarin,Android,Android Actionbar,Android Viewpager,Fragment,Xamarin,我在我的FragmentStatePagerAdapter中交换碎片列表时遇到了问题,我想知道是否有人有想法。我希望有以下特点 主要活动包括三个选项卡(餐厅、评论、收藏夹),每个选项卡都包含一个包含餐厅列表的片段 用户可以在每个选项卡之间滑动以查看不同的列表 主活动布局有一个按钮。当用户按下按钮时,它将用另一个片段列表交换所有现有片段。新的片段列表将是三个带有餐厅位置图(谷歌地图)的片段,而不是餐厅列表 我目前有滑动标签与actionbar和view pager一起使用。我在某种程度上成功地

我在我的FragmentStatePagerAdapter中交换碎片列表时遇到了问题,我想知道是否有人有想法。我希望有以下特点

  • 主要活动包括三个选项卡(餐厅、评论、收藏夹),每个选项卡都包含一个包含餐厅列表的片段
  • 用户可以在每个选项卡之间滑动以查看不同的列表
  • 主活动布局有一个按钮。当用户按下按钮时,它将用另一个片段列表交换所有现有片段。新的片段列表将是三个带有餐厅位置图(谷歌地图)的片段,而不是餐厅列表
我目前有滑动标签与actionbar和view pager一起使用。我在某种程度上成功地将列表片段与映射片段交换,但出现了以下问题:

  • 当我点击主页上的按钮时,第一个(餐厅)选项卡变为空白
  • 当我滑动到下一个选项卡(reviews)时,该选项卡将填充一个地图片段
  • 当我滑动到第三个选项卡(收藏夹)时,该选项卡再次为空
我的设置如下:

  • 主要活动扩展FragmentActivity并实现ActionBar.ITabListener
  • 一个RestaurantListFragment类用于餐馆列表片段,其中填充了用于搜索、评论和收藏夹的不同数据
  • 一个RestaurantListMap类用于映射列表片段,再次为每个选项卡填充不同的数据
  • 一个TabPagerAdapter类扩展FragmentStatePagerAdapter
关于这个话题,我几乎尝试了stackoverflow上的每一篇文章,但到目前为止都没有成功。有人有什么想法吗?代码附在下面。谢谢

    //Main activity
    public class Main : FragmentActivity, ActionBar.ITabListener
    {
    //Some generic code here, nothing special
    //....//

    //The button that triggers the fragments swap
        private void BindCommands()
        {
            ListMapSwitchButton.Click += (sender, e) => 
            {
                _isList = !_isList;
                ListMapSwitchButton.Text = _isList ? RESTAURANTS_MAP_TEXT : RESTAURANTS_LIST_TEXT;
                mAdapter.SwapListMapFragments(viewPager);
            };
        }
}


    public class TabsPagerAdapter : FragmentStatePagerAdapter   {

        private void PopulateFragments()
        {
            _fragments = new List<RestaurantFragmentBase> () 
            {
                new RestaurantListFragment (),
                new RestaurantListFragment(),
                new RestaurantListFragment()
            };
        }

        public void SwapListMapFragments(ViewPager pager)
        {

            _fragments.Clear ();
            _fragments.Add (
                new RestaurantMapFragment()
            );
            _fragments.Add (
                new RestaurantMapFragment()
            );
            _fragments.Add (
                new RestaurantMapFragment()
            );

            NotifyDataSetChanged ();
            pager.DestroyDrawingCache ();
        }

        public override int GetItemPosition (Java.Lang.Object itemObject)
        {
            return PositionNone;
        }

        public override Android.App.Fragment GetItem(int index) 
        {
            return _fragments[index];
        }

        #region implemented abstract members of PagerAdapter

        public override int Count {
            get {
                return 3;
            }
        }

        #endregion

    }
//主要活动
公共类主:FragmentActivity,ActionBar.ITabListener
{
//这里有一些通用代码,没什么特别的
//....//
//触发片段交换的按钮
私有void BindCommands()
{
ListMapSwitchButton。单击+=(发件人,e)=>
{
_isList=!\u isList;
Text=\u isList?RESTAURANTS\u MAP\u Text:RESTAURANTS\u LIST\u Text;
mAdapter.SwapListMapFragments(viewPager);
};
}
}
公共类选项卡适配器:FragmentStatePagerAdapter{
私有void PopulateFragments()
{
_片段=新列表()
{
新建RestaurantListFragment(),
新建RestaurantListFragment(),
新餐厅ListFragment()
};
}
公共无效SwapListMapFragments(ViewPager寻呼机)
{
_Clear();
_碎片。添加(
新餐厅餐厅公寓()
);
_碎片。添加(
新餐厅餐厅公寓()
);
_碎片。添加(
新餐厅餐厅公寓()
);
NotifyDataSetChanged();
pager.drawingcache();
}
公共覆盖int-GetItemPosition(Java.Lang.Object-itemObject)
{
返回位置无;
}
public override Android.App.Fragment GetItem(int索引)
{
返回_碎片[索引];
}
#区域实现了PagerAdapter的抽象成员
公共覆盖整数计数{
得到{
返回3;
}
}
#端区
}
请注意,这段代码实际上是用C#和Xamarin编写的,但是除了语法差异之外,它应该与Java非常相似。如果有任何其他信息可能会有所帮助,请告诉我