我正在尝试创建一个 Android 应用程序,其中包含一个带有容器和导航抽屉的单个活动。最初的空容器加载片段,其中有ViewPager
一个选项卡布局,我在其中加载一个片段FragmentTransaction
:
public static void replaceFragmentInContainer(FragmentManager fragmentManager, Fragment fragmentToShow,
boolean addToBackStack)
{
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (addToBackStack)
{
transaction.addToBackStack(null);
}
transaction.replace(R.id.container, fragmentToShow);
transaction.commit();
}
我在 v7ActionBar
中使用 v4 片段和 v7 ActionBarActivity
。
每个加载的片段都是一个片段,它只加载具有实际可用性的其他片段的选项卡。这种选项卡加载片段的示例:
public class MainFragment extends TabsFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
View contentView = inflater.inflate(R.layout.fragment_main, container, false);
initTabsLayout(savedInstanceState, contentView, R.id.pager);
addTab("tabspectag1", "", R.drawable.draw1, Fragment1.class, null);
addTab("tabspectag2", "", R.drawable.draw2, Fragment2.class, null);
addTab("tabspectag3", "", R.drawable.draw3, Fragment3.class, null);
return contentView;
}
我面临的问题是backstack。当一个片段被添加到 backstack 并且我按下后退按钮时,应用程序确实像我想要的那样返回到上一个片段,我看到了选项卡布局本身,但是选项卡的内容是空的,就像没有加载任何内容一样那个标签。发生这种情况时,我仅在使用导航抽屉再次选择该屏幕时才设法重新加载选项卡的内容。
我试过覆盖onBackPressed
活动中的:
@Override
public void onBackPressed()
{
if (getFragmentManager().getBackStackEntryCount() > 0)
{
getFragmentManager().popBackStack();
} else
{
super.onBackPressed();
}
}
但是就像我说的那样,就像我要回到上一个片段,但是该片段中的选项卡没有重新绘制它拥有的片段。
可以做些什么来解决这个问题?
由于我确实看到了 backstack 中原始片段的选项卡布局,但没有看到选项卡内的片段,我是否可能只需要以某种方式刷新选项卡内容意味着重新绘制它?如果我能做这样的事情,那我该怎么做呢?