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

使用Actionbar选项卡在方向上显示错误的片段

许照
2023-03-14

我已经实现了ActionBarsherlock的示例com.actionBarsherlock.sample.fragments,所有这些都工作得很好,直到当所选选项卡有子片段时设备方向发生变化。

一切都好:

一切都很好,可以旋转设备没有问题。现在,如果我在Fragment2中选择一个列表项来推入Fragment2Child1,在我旋转设备之前,一切都是好的。

设备旋转时不良:

tab1->Fragment1

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {

            mTabManager.addTab(mTabHost.newTabSpec("new").setIndicator(getString(R.string.new_)), NewListSupportActivity.NewListFragment.class, null);
        mTabManager.addTab(mTabHost.newTabSpec("project").setIndicator(getString(R.string.project)), ProjectSupportActivity.ProjectListFragment.class, null);
        mTabManager.addTab(mTabHost.newTabSpec("setting").setIndicator(getString(R.string.settings)), SettingSupportActivity.SettingListFragment.class, null);

        if (savedInstanceState != null) {
            mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
        }

    } else {
public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) {

    tabSpec.setContent(new DummyTabFactory(this.mActivity));
    final String tag = tabSpec.getTag();

    final TabInfo info = new TabInfo(tag, clss, args);

    // Check to see if we already have a fragment for this tab, probably
    // from a previously saved state. If so, deactivate it, because our
    // initial state is that a tab isn't shown.
    info.fragment = this.mActivity.getSupportFragmentManager().findFragmentByTag(tag);
    if (info.fragment != null && !info.fragment.isDetached()) {
        final FragmentTransaction ft = this.mActivity.getSupportFragmentManager().beginTransaction();
        ft.detach(info.fragment);
        ft.commit();
    }

    this.mTabs.put(tag, info);
    this.mTabHost.addTab(tabSpec);
}

@Override
public void onTabChanged(String tabId) {

    TabInfo newTab = mTabs.get(tabId);
    if (mLastTab != newTab) {
        FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
        if (mLastTab != null) {
            if (mLastTab.fragment != null) {
                ft.detach(mLastTab.fragment);
            }
        }
        if (newTab != null) {
            if (newTab.fragment == null) {
                newTab.fragment = Fragment.instantiate(mActivity, newTab.clss.getName(), newTab.args);
                ft.add(mContainerId, newTab.fragment, newTab.tag);
            } else {
                ft.attach(newTab.fragment);
            }
        }

        mLastTab = newTab;
        ft.commit();
        mActivity.getSupportFragmentManager().executePendingTransactions();
    }
}

以及推送Fragment2Child1或任何子级的代码

public void pushFragment(TradiesFragment current, TradiesFragment fragment) {

    fragment.setFragmentListener(this);
    final FragmentManager fm = this.fragment.getFragmentManager();
    final FragmentTransaction ft = fm.beginTransaction();
    ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, android.R.anim.slide_in_left, android.R.anim.slide_out_right);
    ft.detach(current);
    ft.add(this.fragment.getId(), fragment);
    ft.addToBackStack(null);
    ft.commit();
}

共有1个答案

薛浩言
2023-03-14

这个问题没有答案。至少我能想到的没有一个不是彻头彻尾的丑陋。解决方案是将Fragment2Child1包装在一个活动中。当导航到fragment2child1activity时,最终会隐藏tab活动。并且用户每次都被迫导航回主活动(带有选项卡)。从好的方面来看,它实际上使UI更加简单。

 类似资料:
  • 我有一个应用程序,它使用选项卡进行导航。通过这些选项卡,我在布局中使用和。 我已经在应用程序的主中配置了这些内容。在这里,我为添加了一个页面更改监听器,并更改了关于位置的选项卡。当按下选项卡时,我也会以另一种方式进行操作。这都没问题。 然后我就有了标签中的内容。它们都扩展了类。第一个必须根据设备改变布局。在横向平板电脑()上,我有一个包含两个片段的布局,而其他设备只有一个片段。这是由appiate

  • 视图与所有其他选项卡栏项目(事件、挂起、浏览、我的个人资料)配合良好,但对于“更多”部分,当推送到相关视图控制器时,选项卡栏视图控制器将显示选项卡栏上方的新底部栏,如图所示。 现在我试图设置底部栏为无,试图隐藏底部栏在属性检查员,没有工作。我想帮助删除这个空白视图视为底部栏,显示在标签栏上方。

  • 我正在使用动作栏和带有片段的选项卡导航。 每个选项卡都包含一个带有列表视图的片段X,当单击列表中的一个项目时,片段X被另一个带有项目详细信息的片段取代。 当我在FragmentY中时,如何设置的Up按钮以加载FragmentX? 文档显示导航应该在之间完成,但的导航选项卡允许在之间导航,而不是。 我错过了什么?

  • 因此,我使用ViewPager,使用ActionBar选项卡式活动创建了一个Android应用程序项目。我还创建了两个片段类,并附带了相应的片段布局。当选择相应的选项卡时,我将片段返回到SectionsPagerAdapter。 现在我有一些问题。我的印象是,每次选择一个选项卡时,它都会调用片段类并进入片段的onCreateView,但它只发生一次。 我想要实现的是知道何时选择选项卡,以及相应的片

  • 我有8个标签。由于所有选项卡都应该显示自定义列表,所以我试图添加相同的片段实例。我正在使用OnEventBackGroundThread中的EventBus下载列表,并将其添加到OnEventMainThread中的adapter中。 我可以看到PageSlidingTabStrip下载选定选项卡的数据以及其他两个选项卡(在选定选项卡旁边)的数据。标签标题是准确的。我可以下载每个标签的数据。现在的