gpt4 book ai didi

android - 在选项卡导航和列表导航之间切换

转载 作者:太空狗 更新时间:2023-10-29 14:27:55 26 4
gpt4 key购买 nike

我正在使用 ActionBarSherlock并申请 this pattern对于我在 android 开发者网站上找到的选项卡导航。它工作得很好,但我也希望能够在 NAVIGATION_MODE_TABSNAVIGATION_MODE_LIST 之间切换,以保留选项卡和 fragment 之间的关联。

我上面提到的模式非常适合保留通用代码。因此,我将监听器添加到我的选项卡并将它们与特定 fragment 相关联,如下所示:

bar.addTab(bar.newTab()
.setText("MyFragment")
.setTabListener(new TabListener<SomeFragment>(this, "myfargment", SomeFragment.class)));

并在泛型的帮助下单击关联的选项卡时实例化 fragment :

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);
}
}

我的问题是如何在使用列表导航模式在我的 fragment 之间导航时实现类似的方式。我找不到类似的方法,因为 ActionBar 上列表的 OnNavigationListener 适用于整个列表,而不是像 per item basis 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时,如果我将手机置于横向模式,它会将选项卡转换为列表并保留 fragment 和列表项之间的关联(以前是标签项)我怎样才能按需而不是方向改变?

最佳答案

我认为如果您在选项卡模式下手动设置为列表导航是不可能的。当我的一个应用程序低于“大”存储桶时,我为它设置了列表导航。这就是我使用导航监听器的方式:

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 是一个将整数位置映射到 fragment 名称 ex 的 HashMap。 “com.android.myproject.MyFragment”

希望对您有所帮助。

关于android - 在选项卡导航和列表导航之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10123622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com