【问题标题】:Fragment not showing on actionBar tab select after orientation change方向更改后,片段未显示在 actionBar 选项卡上选择
【发布时间】:2013-05-09 22:37:57
【问题描述】:

我无法让片段与 ActionBar 一起正常工作 - 当我更改选项卡时,片段会正确切换。但是当我旋转手机时,记住的片段会正确显示(取决于选择的内容),但我无法切换到另一个选项卡。没有错误,什么都没有,也不知道怎么检查是什么问题

MapHandlerFragment mMapHandler;
VehiclesFragment mVehiclesFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActionBar ab = getSupportActionBar();
    ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    ab.setDisplayShowTitleEnabled(false);
    ab.setDisplayShowHomeEnabled(false);

        FragmentManager fm = getSupportFragmentManager();

    mMapHandler = new MapHandlerFragment();
    mVehiclesFragment = new VehiclesFragment();

    if (savedInstanceState == null) {

        fm.beginTransaction()
             .add(android.R.id.content, mVehiclesFragment)
             .add(android.R.id.content, mMapHandler)
             .commit();

    } else {

        fm.beginTransaction()
        .hide(mMapHandler)
        .hide(mVehiclesFragment)
        .commit();
    }

    Tab vehiclesTab = ab.newTab().setText("Pojazdy").setTag(FRAGMENT_VEHICLES)
            .setTabListener(new MyTabsListener(mVehiclesFragment));
    ab.addTab(vehiclesTab);
    Tab mapTab = ab.newTab().setText("Mapa").setTag(FRAGMENT_MAP)
            .setTabListener(new MyTabsListener(mMapHandler));
    ab.addTab(mapTab);  

    if (savedInstanceState == null) {            
        ab.selectTab(mapTab); 
    } else {
        String selected = savedInstanceState.getString(SELECTED_TAB);
        if (selected == FRAGMENT_VEHICLES) {
            ab.selectTab(vehiclesTab);
        } else if (selected == FRAGMENT_MAP) {
            ab.selectTab(mapTab);
        }           
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString(SELECTED_TAB, mSelectedTab);
}

protected class MyTabsListener implements ActionBar.TabListener {

    private Fragment fragment;

    public MyTabsListener(Fragment fragment) {
        this.fragment = fragment;
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        ft.show(fragment);
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        ft.hide(fragment);
    }
}

}

我知道当savedInstanceState 不是null 时我不添加片段,但如果是这种情况,为什么所选片段正确显示?另外,当我添加片段时,它们会相互重叠......

【问题讨论】:

  • 您是否检查过您的onTabReselected 是否被调用了,我敢打赌是因为那里没有任何东西可以处理它
  • @tyczj 是的,它被称为,但是我应该在那里放什么?
  • 在重新选择选项卡时执行您希望应用程序执行的任何操作

标签: android android-fragments android-actionbar android-tabs


【解决方案1】:

它什么也没做,因为 onTabReselected 被调用,你可以随心所欲地处理它,但这就是为什么当你选择标签时什么都没有发生

【讨论】:

  • 我想我不明白.. 我试图在onTabReselected 中显示所需的片段,但它不起作用,我不知道我还能做什么。我应该放什么以便在方向改变后正确显示片段?
  • 你可以删除片段然后重新添加它,这样你就不会像你说的那样堆叠
猜你喜欢
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多