【发布时间】:2012-08-18 02:36:22
【问题描述】:
我正在开发一个使用FragmentActivity 实现选项卡的应用程序。由于整个应用程序都需要选项卡,因此片段被广泛用于使应用程序在所有版本的 android 上兼容。
因此,我在可视化后台堆栈中存在哪些片段时遇到了问题。我确信有一种方法可以检索 backstack 上的片段列表。谢谢。
【问题讨论】:
标签: android tabs android-fragments back-stack
我正在开发一个使用FragmentActivity 实现选项卡的应用程序。由于整个应用程序都需要选项卡,因此片段被广泛用于使应用程序在所有版本的 android 上兼容。
因此,我在可视化后台堆栈中存在哪些片段时遇到了问题。我确信有一种方法可以检索 backstack 上的片段列表。谢谢。
【问题讨论】:
标签: android tabs android-fragments back-stack
FragmentManager 有方法:
getBackStackEntryCount()
getBackStackEntryAt(整数索引)
FragmentManager fm = getFragmentManager();
for(int entry = 0; entry<fm.getBackStackEntryCount(); entry++){
Log.i(TAG, "Found fragment: " + fm.getBackStackEntryAt(entry).getId());
}
【讨论】:
findFragmentById()并使用这些id,你将找不到片段。
如果你想检查哪个片段是可见的,如果你知道片段所在的视图的id,首先你必须在onCreate()下面添加
getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
Fragment f = getSupportFragmentManager().findFragmentById(R.id.content_frame);
if (f != null){
updateActionBarTitle(f);
}
}
});
private void updateActionBarTitle(Fragment fragment) {
String fragClassName = fragment.getClass().getName();
if (fragClassName.equals(FirstFragment.class.getName())) {
setTitle("Home");
} else if (fragClassName.equals(SecondFragment.class.getName())) {
setTitle("Second");
}
}
这将更新您在返回堆栈更改侦听器上的操作栏标题。
【讨论】: