当前位置: 首页 > 知识库问答 >
问题:

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

梁学真
2023-03-14
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);
    }
}
@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时,如果我将手机置于横向模式,它会将选项卡转换为列表,并保留片断和列表项(以前是选项卡项)之间的关联,如何根据需要而不是根据方向变化实现此结果?

共有1个答案

董和风
2023-03-14

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

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

我希望这能有所帮助。

 类似资料:
  • 我有一个非常简单的应用程序,由三个片段和一个底部导航栏组成,使用“New Project”创建- 有没有“标准”的方法来做到这一点? 我尝试过: 使用导航组件的,它似乎启动了带有自己的后栈的片段并破坏了底部导航。 以不同的方式使用,这要么导致异常,要么以不同的方式破坏底部导航。 在这篇帖子中,有人问了完全相同的问题,但被标记为重复。我没有找到答案,尤其是关于导航组件。

  • 描述 (Description) 您可以将导航栏,可以让你在它们之间翻转,看起来像导航栏的选项卡。 例子 (Example) 下面的例子说明了如何使用从导航条Framework7开关突片 - <!DOCTYPE html> <html> <head> <meta name = "viewport" content = "width = device-width, initial-

  • 我有两个屏幕链接到两个标签按钮 < li >名称 < li >持续时间 单击“下一步”按钮时,我希望选项卡移动到第二个按钮。在我的视图模型中,这是我对“下一步”按钮的命令 这是我的代码示例 第二个视图将全屏打开,而不是移动到下一个选项卡。 屏幕已连接 第一屏 第二屏幕 我看到的屏幕

  • 本文向大家介绍bootstrap导航、选项卡实现代码,包括了bootstrap导航、选项卡实现代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了bootstrap导航和选项卡的具体代码,供大家参考,具体内容如下 导航: 效果图: 选项卡: 效果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我在开发一个Android应用程序。我有一个处于选项卡导航模式的actionbar和三个调用frameview容器中要替换的片段的选项卡。 我的问题是:如果用户在一个选项卡中生成一个backstack,然后切换到另一个选项卡,如果在这种状态下按下back按钮--那么backstack会弹出,但选项卡没有改变,这导致重叠的片段(属于Tab1的backstack片段会弹出/添加,但Tab2仍然被选中,

  • 我有一个带有导航抽屉的应用程序,它为每个菜单项使用片段。 每次单击一个项目时,我都会替换当前片段。 问题是,在用户单击后显示新片段需要很长时间,并且它会被卡住。加载时间最长的片段是一个片段,其中还包含子片段的选项卡(一个片段包含一个RecyclerView)<有什么方法可以加快碎片的装载速度吗?(如果可能的话,可能会提前初始化它们?) 这是我的代码: HalachaFragment。cs(包含选项