Android 交换FragmentStatePagerAdapter内的片段列表
我在我的FragmentStatePagerAdapter中交换碎片列表时遇到了问题,我想知道是否有人有想法。我希望有以下特点Android 交换FragmentStatePagerAdapter内的片段列表,android,android-actionbar,android-viewpager,fragment,xamarin,Android,Android Actionbar,Android Viewpager,Fragment,Xamarin,我在我的FragmentStatePagerAdapter中交换碎片列表时遇到了问题,我想知道是否有人有想法。我希望有以下特点 主要活动包括三个选项卡(餐厅、评论、收藏夹),每个选项卡都包含一个包含餐厅列表的片段 用户可以在每个选项卡之间滑动以查看不同的列表 主活动布局有一个按钮。当用户按下按钮时,它将用另一个片段列表交换所有现有片段。新的片段列表将是三个带有餐厅位置图(谷歌地图)的片段,而不是餐厅列表 我目前有滑动标签与actionbar和view pager一起使用。我在某种程度上成功地
- 主要活动包括三个选项卡(餐厅、评论、收藏夹),每个选项卡都包含一个包含餐厅列表的片段
- 用户可以在每个选项卡之间滑动以查看不同的列表
- 主活动布局有一个按钮。当用户按下按钮时,它将用另一个片段列表交换所有现有片段。新的片段列表将是三个带有餐厅位置图(谷歌地图)的片段,而不是餐厅列表
- 当我点击主页上的按钮时,第一个(餐厅)选项卡变为空白李>
- 当我滑动到下一个选项卡(reviews)时,该选项卡将填充一个地图片段
- 当我滑动到第三个选项卡(收藏夹)时,该选项卡再次为空
- 主要活动扩展FragmentActivity并实现ActionBar.ITabListener
- 一个RestaurantListFragment类用于餐馆列表片段,其中填充了用于搜索、评论和收藏夹的不同数据
- 一个RestaurantListMap类用于映射列表片段,再次为每个选项卡填充不同的数据
- 一个TabPagerAdapter类扩展FragmentStatePagerAdapter
//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非常相似。如果有任何其他信息可能会有所帮助,请告诉我