【发布时间】:2015-06-02 11:50:12
【问题描述】:
我正在尝试创建一个 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();
}
我在 v7 ActionBarActivity 中使用 v4 片段和 v7 ActionBar。
每个加载的片段都是一个片段,它只加载具有实际可用性的其他片段的选项卡。此类标签加载片段的示例:
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 并且我按下后退按钮时,应用程序确实像我想要的那样返回到上一个片段,我看到了选项卡布局本身,但是选项卡的内容是空的,就像没有加载任何内容一样那个标签。发生这种情况时,我仅在使用导航抽屉再次选择该屏幕时才设法重新加载选项卡的内容。
我尝试在活动中覆盖onBackPressed:
@Override
public void onBackPressed()
{
if (getFragmentManager().getBackStackEntryCount() > 0)
{
getFragmentManager().popBackStack();
} else
{
super.onBackPressed();
}
}
但就像我说的那样,就像我要回到上一个片段,但该片段内的选项卡并没有重新绘制它拥有的片段。
有什么办法可以解决这个问题?
由于我确实看到了后台堆栈中原始片段的标签布局,但没有看到标签内的片段,我是否可能只需要以某种方式刷新标签内容意味着重新绘制它?如果我能做这样的事情,那我该怎么做呢?
【问题讨论】:
标签: android android-fragments back-stack fragmenttransaction fragment-backstack