在标签导航和列表导航之间切换
问题描述:
我正在使用ActionBarSherlock并将this pattern用于我在android开发人员网站上找到的标签导航。它工作的很好,但我也希望能够在NAVIGATION_MODE_TABS
和NAVIGATION_MODE_LIST
之间切换,以保留选项卡和片段之间的关联。在标签导航和列表导航之间切换
上面提到的模式对于保留泛型代码非常有用。所以,我有特异片段添加侦听我的标签和关联他们是这样的:
bar.addTab(bar.newTab()
.setText("MyFragment")
.setTabListener(new TabListener<SomeFragment>(this, "myfargment", SomeFragment.class)));
和实例化片段点击与仿制药的帮助下,相关的选项卡时:
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
}
我的问题是我怎样才能实现类似的方式,而浏览我的片段与列表导航模式。我找不到类似的方法,因为OnNavigationListener
的ActionBar上的列表适用于整个列表而不是每个项目的基础像tablistener。
或做我必须做这样的事情:
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
switch (itemPosition) {
case 0:
//Replace the current fragment with FragmentA
break;
case 1:
//Replace the current fragment with FragmentB
break;
case 2:
//Replace the current fragment with FragmentC
break;
default:
break;
}
return true;
}
编辑:虽然导航模式如果我把设置为NAVIGATION_MODE_TABS
:
我注意到一个有趣的现象我的手机在风景模式下它将标签转换为列表并且保存联系之间的fragmen ts和列表项目(哪些是在之前的标签项目)我怎样才能达到这个结果点播而不是在方向变化?
答
我不认为它是可能的,如果你在标签模式下手动设置为列表导航。当我的应用程序落在“大型”存储区之下时,我已为其中一个应用程序设置了列表导航。这是我如何使用导航听众:
OnNavigationListener mNavigationListener = new OnNavigationListener()
{
int mLastPosition = -1;
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId)
{
String selectedTag = mFragmentNames.get(itemPosition);
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentByTag(selectedTag);
FragmentTransaction ft = fm.beginTransaction();
/** Used to avoid the same fragment being reattached. */
if(mLastPosition != itemPosition)
{
/** Means there was a previous fragment attached. */
if(mLastPosition != -1)
{
Fragment lastFragment = fm.findFragmentByTag(mFragmentNames.get(mLastPosition));
if(lastFragment != null)
ft.remove(lastFragment);
}
if(fragment == null)
{
/** The fragment is being added for the first time. */
fragment = Fragment.instantiate(HomeActivity.this, selectedTag);
ft.add(R.id.rootLayout, fragment, selectedTag);
ft.commit();
} else
{
ft.attach(fragment);
ft.commit();
}
}
/**
* The newly attached fragment will be the last position if changed.
*/
mLastPosition = itemPosition;
return true;
}
};
变量mFragmentNames是映射一个整数位置片断名称的前一个HashMap。 “com.android.myproject.MyFragment”
我希望这有助于。