交换FragmentStatePagerAdapter中的片段列表

时间:2014-02-18 09:43:04

标签: android android-actionbar android-viewpager fragment xamarin

我无法在FragmentStatePagerAdapter中交换片段列表,并且想知道是否有人可能有想法。我希望有以下功能;

  • 主要活动包括三个标签(餐馆,评论,收藏),每个标签包含一个包含餐馆列表的片段
  • 用户可以在每个标签之间滑动以查看不同的列表
  • 主要活动布局有一个按钮。当用户按下按钮时,它会将所有现有片段与另一个片段列表交换。新的片段列表将是三个片段,其中包含餐馆位置图(谷歌地图)而不是餐馆列表

我目前使用滑动标签处理操作栏和查看寻呼机。我在某种程度上成功地使用地图片段交换列表片段,但会出现以下问题:

  • 当我点击主页面上的按钮时,第一个(餐馆)标签变为空白。
  • 当我滑动到下一个标签(评论)时,标签会填充一个地图片段
  • 当我滑动到第三个标签(收藏夹)时,标签再次为空

我的设置如下:

  • 扩展FragmentActivity并实施ActionBar.ITabListener
  • 的主要活动
  • 一个RestaurantListFragment类用于餐馆列表片段,填充了搜索,评论和收藏夹的不同数据
  • 一个RestaurantListMap类用于地图列表片段,再次填充每个选项卡的不同数据
  • 一个扩展FragmentStatePagerAdapter的TabPagerAdapter类

我已经尝试了关于此主题的几乎所有关于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

    }

请注意,此代码实际上是使用Xamarin在C#中编写的,但除了语法差异外,它应该与Java相同。如果有任何其他信息可能有帮助,请告诉我。

0 个答案:

没有答案